Master Coda - Logo
Master Coda
Nepravidelný blog o programování

Kolikrát má být v metodě return?

08.01.2023
Vždycky pouze jednou nebo to může být i jinak?
----------------------------------------

Pozn.: S ohledem na mé zaměření mám zkušenosti převážně v Javě a JavaScriptu). Je možné, že v jiných jazycích mohou platit trochu jiná pravidla a jiná pro a proti.

Věřím, že spousta z vás se už potkala s tvrzením, že každá metoda má mít právě jeden výstup, tj. v případě Javy maximálně jeden return (pokud je návratový typ void, tak return není potřeba, ačkoliv není syntaktická chyba prázdný return; řádek uvést).

Co jsem našel, tak s tímto pravidlem jako první přišel holandský průkopník počítačových technologií Edsger Dijkstra, když definoval zásady strukturovaného programování. Potkal jsem už programátory, kteří ho každému a za každou cenu cpou. Sám jsem ho jeden čas vcelku důsledně používal. Pak jsem si přečetl knihu o Refaktoringu od Martina Fowlera.

V jedné se svých technik pro refaktoring nazvané „Replace Nested Conditional with Guard Clauses“ dělá pravý opak a kód se čtyřmi přiřazeními výsledku a jedním returnem bourá a předělává do čtyř řádků, každý s vlastním returnem. Argumentuje přitom tím, že čitelnost a srozumitelnost je důležitější. A jeho úprava je vskutku kompaktnější než if-else hell, se kterým začínal.

Jedno klišovité moudro říká, že „když máš v ruce kladivo, všechno začne vypadat jako hřebík“. Jenže svět se samozřejmě neskládá pouze z hřebíků, tudíž je třeba znát i jiné nástroje a vědět, kdy použít který. Podle mě se to úplně stejně platí v případě uplatňování pravidel (nejen) pro programování.

Argumenty pro a proti

Zde budu postupně shromažďovat argumenty a „pravidla“, které mohou pomoci rozhodnout, kdy dát přednost které variantě. Pochopitelně to bude vždy především o vašem vlastním pocitu a zkušenostech.

  • Důležitý argument pro single return byl obsluha memory leaků. Předčasný return mohl způsobit, že se nevykonal kód pro uvolnění paměti. To v Javě není až tak velké téma (naučte se ale pracovat s try-with-resources, protože s I/O prostředky a DB konektory vám automatická správa paměti pomoct nemůže), tedy můžeme dát spíše přednost obecné čitelnosti kódu.
  • Zajímavý je argument pro logování. Pokud si chcete vypisovat návratovou hodnotu, rozhodně se to bude dělat lépe před jediným returnem na konci metody, než před každým z dvaceti uvnitř…

Další články k tématu

----------------------------------------
Kolikrát má být v metodě return? @ Master Coda
Zobrazit zdrojový kód článkuNavrhnout úpravu