Autor Zpráva
Petr K.
Profil *
Může být podmínka if ve větvi case u switche? Nejspíš asi ne že? Popřípadě jak?
anonymn
Profil *
Petr K.:
Může být podmínka if
Proč to nezkusíš?
Alphard
Profil
Jednotlivé konstrukce lze zanořovat, což je snadné ověřit. Nezapomínejte ale na přehlednost, příliš složité scripty bývají špatně čitelné a náchylné k chybám. Hlavně začátečníci se často spokojí s tím, že kód nějak funguje a neřeší, jak vypadá. V praxi se však kód častěji čte než píše.
Kubo2
Profil
K tej prehľadnosti. Do case je možné vkladať bloky kódu, ktoré sa interpretujú ako jediný samotný príkaz. Takže ak budeš niekedy potrebovať do case vložiť veľmi dlhý kód, určite ti môžem poradiť použiť blok kódu, ktorý sa postará o prehľadné dvojúrovňové zanorenie podmienok a zároveň o to, aby si náhodou na konci bloku case nezámerne nezabudol použiť break;. Pozri si príklad:

$int = rand(1, 4);

switch($int) {
  case 1: {
    // dlhý kód
  } break;
  
  case 2: {
    // tiež nejaký dlhý kód
  } break;
  
  default: {
    // dlhý kód pracujúci s výsledkom 3 alebo 4
  } break;
}
Joker
Profil
Kubo2:
Nejlepší je do case dlouhý kód nevkládat.
stop
Profil *
Nebo ho aspoň zabalit do funkce.
Chro
Profil
Joker:
Máš důvod(y), proč dlouhý kód (bavíme se o kódu např. do 50 řádků?) do konstrukce switch nevkládat? Mně to přijde naopak přehledné, blok kódu je pěkně ohraničen jak výrazy case a break, tak případnými složenými závorkami. Rozhodně lepší při např. 10 větvení switch s 10 case a break, než 10 podmínek if (else if) za sebou.
lionel messi
Profil
Chro:
Rozhodně lepší při např. 10 větvení switch s 10 case a break, než 10 podmínek if (else if) za sebou.
Prehľadnosť kódu je subjektívna. Mne príde prehľadnejších práve 10 (else)if-ov za sebou, switch používam len zriedkavo. Navyše v ňom „číha“ nebezpečenstvo v podobe vynechania príkazu break.
anonymn
Profil *
lionel messi:
Navyše v ňom ‚číha‘ nebezpečenstvo v podobe vynechania príkazu break.
To je blbost. Asi podobná, jako u ifů číhá nebezpečí zapomenutí (nebo špatného umístění) koncové složené závorky.
mimochodec
Profil
Aby tady nebylo málo názorů, tak já v případě nějakých zásadních členění preferuju před switchem několik ifů.
Joker
Profil
Chro:
Máš důvod(y), proč dlouhý kód (bavíme se o kódu např. do 50 řádků?) do konstrukce switch nevkládat?
:-)
Možná bych to omezil i více, třeba do 30 řádků, ale jinak souhlasím: Do case lze vkládat i dlouhý kód za předpokladu, že nebude dlouhý :-)

Ale abych to napsal přesněji, netýká se to jen case, jakýkoliv blok kódu by neměl být moc dlouhý.
Alphard
Profil
Chro [#7]:
Např. je hezké, když lze celý blok (switch i if se všemi větvemi) zhlédnout najednou na obrazovce, bez posouvání. Lze-li nějakou funkčnost vyčlenit do samostatné dobře pojmenované funkce a volat jen tu funkci, je to lepší.
Kubo2
Profil
No, v prípade tých „blokov kódu“ { } v case sa jedná v podstate o prenesenú konvenciu Javy, ktorá sa týka spárovania príkazov patriacich k sebe. V prípade prípadu (možnosti) case k nemu vo väčšine prípadov do páru patrí break, takže ide vlastne o také dodržanie „konvencie“ prehľadnosti kódu.
lionel messi
Profil
anonymn:
To je blbost.
Jedná sa len o môj názor a jeden zo subjektívnych dôvodov, prečo sa ľahšie orientujem v kóde s elseif.
1Pupik1989
Profil
Já používám také vždy if-else if-else, protože má rychlejší zpracování a je přehlednější. Píšu o milionu průchodů a více. Poslední dobou jsem zjistil, že ani třeba cyklus while moc nepoužívám. Nemám tak nějak proč je používat.

Vypůjčím si od kolegy příklad switche. V příkladu bude krátký kód.

$int = rand(1, 4);
 
switch($int) {
  case 1:  { /* inline kód */ } break;
  case 2:  { /* další inline kód */ } break;
  default: { /* inline kód pracující s výsledkem 3 nebo 4 */ }
}

A já zapisuji:

$int = rand(1, 4);

if($int === 1){ /*inline kód */ }else
if($int === 2){ /*další inline kód */ }else
              { /*inline kód pracující s výsledkem 3 nebo 4 */ }

A třeba i uzavírací chlupatou závorku si odtabulátoruji zároveň, abych v tom měl přehled.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0