Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Void return type kdy se používá

Aktivity
Avatar
Jan Sagi
Člen
Avatar
Jan Sagi:1.6.2021 17:25

Ahoj nedávno my PhpStorm napovídá použít void pro return ale dokumentaci jsem asi nepochopil kdy se má používát a jaké jsou jeho výhody? Děkuji za radu

 
Odpovědět
1.6.2021 17:25
Avatar
Jan Kerhart
Člen
Avatar
Jan Kerhart:3.6.2021 1:56

Nevím, jestli jsem otázku pochopil správně... Myslíš toto?

function foo(): void {

}

Za tu dvojtečku se uvádí návratový typ. Void znamená žádný, tj. takto deklarovaná funkce nebude (nesmí) vracet žádnou hodnotu. V praxi to znamená:

// Tato funkce je v pořádku.
function foo(): void {
    // nějaký kód
}

// Tato funkce je také v pořádku.
function bar(): void {
    // nějaký kód
        return;
    // nějaký kód
}

// Tato funkce vyhodí chybu: "Fatal error: A void function must not return a value"
function baz(): void {
    // nějaký kód
    return 1;
}

// Tato funkce je v pořádku.
function baz(): int {
    // nějaký kód
    return 1;
}

Používat by se to mělo ideálně vždy, kdy funkce nevrací žádnou hodnotu (a pokud vrací, tak místo void uveď její typ). Na rozdíl od většiny jiných jazyků je to v PHP ale nepovinné a starší verze PHP to dokonce ani nepodporovali.

Výhody to má prakticky asi dvě:

  • Zlepšuje to čitelnost a přehlednost kódu
  • Jednoznačně to určuje návratový typ – zamezí se tím chybám kvůli špatnému automatickému přetypování. Aby jsi této výhody plně využil, doporučuji povolit striktní kontrolu typů (vypnout automatické přetypování) na začátku souboru takto:
declare(strict_types=1);
 
Nahoru Odpovědět
3.6.2021 1:56
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:3.6.2021 9:09

Spis to z php dela podobnost s cpp(C++) kodem.
O prehlednosti by se dalo diskutovat. Ale fakt je, ze kdyz vis z prvniho radku, ze tam neni void, tak hledas ve funkci slova return. A kdyz tam void je, tak vis, ze tam return neni a bud funkce vraci data do promenne nebo zadna. Ale, vicemene je to jen bezvyznamne zdrzeni, vzdycky se da hledat slovo return :)

Editováno 3.6.2021 9:09
 
Nahoru Odpovědět
3.6.2021 9:09
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Peter Mlich
DarkCoder:3.6.2021 12:50

A kdyz tam void je, tak vis, ze tam return neni...

Tento výrok je chybný. Funkce která nevrací hodnotu musí končit přechodem přes uzavírací závorku těla funkce } nebo příkazem return;, tak jak už zde v předchozím příspěvku správně uvedl Jan Kerhart. Nejde o přehlednost, ale o jednoznačnost. Než složitě hledat slovo return v těle funkce je lepší si přečíst komentář o významu návratové hodnoty nad hlavičkou definice funkce.

Nahoru Odpovědět
3.6.2021 12:50
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jan Sagi
Člen
Avatar
Odpovídá na Jan Kerhart
Jan Sagi:3.6.2021 18:01

Děkuji moc za 100% srozumitelné vysvětlen už jsem zase o něco chytřejší :-) diky

 
Nahoru Odpovědět
3.6.2021 18:01
Avatar
Jan Kerhart
Člen
Avatar
Odpovídá na Peter Mlich
Jan Kerhart:3.6.2021 19:37

Mně to teda přijde rozhodně lepší vždy uvádět. To zlepšení je zejména když danou funkci potom voláš, jelikož v tu chvíli ti PhpStorm informaci o návratovém typu zobrazí a ty nemusíš tipovat nebo složitě hledat v dokumentaci jaký typ máš od funkce očekávat. Navíc návratový typ nemusí být pouze primitivní proměnná, kde je většinou z názvu funkce poměrně jasné, co máš očekávat, ale může se jednat o referenční datový typ, kde (obzvlášť při používání různých knihoven) není na první pohled často jasné, co máš vlastně čekat.

Když se vrátím přímo k void, tak jednak by mi přišlo nelogické u funkcí, které nic nevrací, nic neuvádět (v některé z verzí PHP to tak myslím bylo – již šlo uvádět návratový typ, ale neexistovalo ještě slovo void), protože by nebylo možné rozlišit, jestli na to programátor zapomněl/nechtěl a nebo jestli nic funkce nevrací. A navíc tím sdělíš IDE, že funkce nic nevrací a ono tě potom upozorní, pokud se pokusíš s návratovou hodnotou pracovat.

 
Nahoru Odpovědět
3.6.2021 19:37
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10.10.2023 8:45

Ono, samotne php ten typ nepotrebuje znat. Takze, jediny duvod je php-storm a podobnost se zapisy v c++, ktere naopak typy potrebuje (ale c++ se specializuje na hw, kde to ani jinak nejde)

 
Nahoru Odpovědět
10.10.2023 8:45
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.