IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.
Avatar
Theodor Johnson
Tvůrce
Avatar
Theodor Johnson:16.8.2012 7:51

zatím jsem sice jen začátečník, ale jsem u lekce kdy přidávám mága do arény, a napadlo mě že by bylo zajímavé přidat do "hry" cheaty, mám to od začátku nastavené tak že jméno si každý nastaví sám a proto pro mě bylo nejlogičtější cheaty používat jako

if (jmeno_1 == "cheater")
 **{bla bla bla pro vytvoření bojovnika}**

a

else
**{//vytvoření normálního bojovníka}**

fungovalo to dobře až do doby než jsem se rozhodl pro jednu funkci cheatu použít několik variant, fungovalo mi sice
if(bla) {bla bla}
else if(bla) {bla bla}
else ...
ale to je zbytečně složitý, tak jsem chtěl udělat podmínku jednodušší, a v tom jsem narazil na problém když jsem zkoušel zadat

if (jmeno_1 == "high five") || (jmeno_1 == "suit up") || (jmeno_1 == "legendary")

tak my vb píše chybu v "||"

Odpovědět
16.8.2012 7:51
Mo8ilε 15 Ѐλđ
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Theodor Johnson
Kit:16.8.2012 8:01

Podmínka musí být v závorkách.

Nahoru Odpovědět
16.8.2012 8:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:16.8.2012 8:02

Bodejď by ne" :) Nemáš to v závorce... A ty co tam máš, jsou zbytečné...

if (jmeno_1 == "high five" || jmeno_1 == "suit up" || jmeno_1 == "legendary")
 
Nahoru Odpovědět
16.8.2012 8:02
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:16.8.2012 8:05

Ale tyhle prasárny nedělej! Použij switch:

switch (jmeno_1)
{
case "high five":
//sem přidej příkazy
break;

case "suit up":
//sem přidej příkazy
break;

case "legendary":
//sem přidej příkazy
break;
}
 
Nahoru Odpovědět
16.8.2012 8:05
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na matesax
Theodor Johnson:16.8.2012 8:06

jo díky nenapadlo mě to, ještě jsem o podmínkách skoro nic nečetl

Nahoru Odpovědět
16.8.2012 8:06
Mo8ilε 15 Ѐλđ
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:16.8.2012 8:08

Vnitřní závorky jsou sice zbytečné, ale často je lepší je tam mít kvůli přehlednosti. Programátor si nemusí vždy přesně vybavit třeba rozdíl priorit mezi '|' a '||'.

Nahoru Odpovědět
16.8.2012 8:08
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:16.8.2012 8:09

JJ - pročti si větvení programu a v něm switch. A zde se hodí přímo ukázkově...

 
Nahoru Odpovědět
16.8.2012 8:09
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:16.8.2012 8:11

Ale zde není žádná priotita - zde je to v jedné lajně... Navíc zde se ukázkovně hodí switch...

 
Nahoru Odpovědět
16.8.2012 8:11
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:16.8.2012 8:17

Uvedený switch je výhodný, pokud každé slovo má vyvolat jinou akci. Pokud mají všechna dělat totéž, tak to bude vypadat mnohem lépe a jednodušeji:

switch (jmeno_1){
   case "high five":
   case "suit up":
   case "legendary":
      //sem přidej příkazy
      break;
}

Pokud však každé slovo má vyvolat jinou akci, což z původního dotazu není patrné, bude lepší tvůj switch.

Každé rozhodování by se mělo dělat pouze 1×. Podmínky typu "nejprve se podívám, jestli je to některé ze slov a pak je teprve rozliším" by se dělat neměly.

Nahoru Odpovědět
16.8.2012 8:17
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:16.8.2012 8:20

'==' má vyšší prioritu než '||', ale nižší než '|'.

Nahoru Odpovědět
16.8.2012 8:20
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:16.8.2012 8:20

To je přeci jasné - svůj switch bych nepoužil, kdyby se měl vykonávat jeden blok příkazů, to by pak byla výhodnější podmínka hoře...

 
Nahoru Odpovědět
16.8.2012 8:20
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:16.8.2012 8:22

Ale zde je to použito rovnoměrně. není zde třeba toto:

if (Y == 7 && ((X > 5 && X < 10) || (X == 25)))
 
Nahoru Odpovědět
16.8.2012 8:22
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:16.8.2012 8:24

Je tam jen jednoduchý výčet možností - proto se zde hodí switch - není-li to myšleno pro jeden blok příkazů...

 
Nahoru Odpovědět
16.8.2012 8:24
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Kit
Theodor Johnson:16.8.2012 8:24

doufal jsem že to bude dost jasné když se vybírá z podmínek který maj stejný účinek, proto mi přišlo zbytečný použít

if
else if
else if
else

ale nepochopil jsem jestli je teda lepší switch nebo if ( pod1 || pod2) ?(pod_no = podmínka)

Nahoru Odpovědět
16.8.2012 8:24
Mo8ilε 15 Ѐλđ
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:16.8.2012 8:24

Pokud by se měl vykonávat jeden blok příkazů, byl by výhodnější můj switch než kombinovaná podmínka nahoře.

Nahoru Odpovědět
16.8.2012 8:24
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Kit
Theodor Johnson:16.8.2012 8:26

nj ale nějak jsem nepochopil v čem je lepší?

Nahoru Odpovědět
16.8.2012 8:26
Mo8ilε 15 Ѐλđ
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:16.8.2012 8:26

Pokud to máš takto = tvoje podmínka a pod ní jen jeden blok příkazů, tak bych to nechal u podmínky...

 
Nahoru Odpovědět
16.8.2012 8:26
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Theodor Johnson
Kit:16.8.2012 8:29

A to je právě to zmatení. Proč máš 3 různé výrazy, které mají jeden účinek?

Nahoru Odpovědět
16.8.2012 8:29
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:16.8.2012 8:30

... a já bych to dal do switch kvůli přehlednosti a snadné rozšiřitelnosti. Co programátor, to názor. Oba přístupy jsou správné.

Nahoru Odpovědět
16.8.2012 8:30
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Kit
Theodor Johnson:16.8.2012 8:31

chtěl jsem udělat víc možností pro cheat v tomto případě se jedná o hlášky Neila Patricka Harrise v seriálu HIMYM a má to ten účinek že se v aréně zobrazí textový obázek obleku, který je Neila hlavní charakteristika v tom seriálu

Nahoru Odpovědět
16.8.2012 8:31
Mo8ilε 15 Ѐλđ
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:16.8.2012 8:34

Nechápu, co na tom nechápeš. :)

Jeli na vstupu Mánička, nebo Anička, nebo Maruška, tak pohlaví = ženské;
Jinak pohlaví = mužské;

:)
 
Nahoru Odpovědět
16.8.2012 8:34
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Theodor Johnson
Kit:16.8.2012 8:37

V čem je switch lepší?

  • je přehlednější
  • snadno doplníš další slovo
  • je o chlup rychlejší
  • obsah proměnné jmeno1 se vyhodnocuje jen 1×
  • místo proměnné jmeno1 můžeš s klidem použít funkci
  • dělá se tak i Simple Factory a tohle je zrovna příklad pro její použití
  • líbí se mi
Nahoru Odpovědět
16.8.2012 8:37
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Kit
Theodor Johnson:16.8.2012 8:39

možná je lepší, ale je zbytečný na jednorázovej příkaz při zadání jména, v takovém případě mi opravdu přijde ten if (...) jednodušší

Nahoru Odpovědět
16.8.2012 8:39
Mo8ilε 15 Ѐλđ
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:16.8.2012 8:44

Přesně to tu píši... :)

 
Nahoru Odpovědět
16.8.2012 8:44
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:16.8.2012 8:49

Já switch nemám rád, o hodně lepší mi přijde:

string[] moznosti = {'suit up', 'high five', 'legendary', ...};
if (moznosti.contains(vyber))
...
Nahoru Odpovědět
16.8.2012 8:49
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Kit:16.8.2012 8:51

Nerozumím pojmu "zbytečný". Jako kanón na vrabce? To je. Ale také je to efektivní nástroj. Pokud jmeno_1 není jen jednoduchá proměnná, ale je to třeba položka pole nebo výsledek volání funkce, beru použití switche jako nezbytné. A to je hodně často.

Už označení proměnné jmeno_1 mi říká, že vznikla nejspíš takto:

jmeno_1=jmeno[1];

Použitím switch je tato pomocná proměnná zbytečná.

Nahoru Odpovědět
16.8.2012 8:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:16.8.2012 8:56

To je také dobré řešení, které bude výhodné zejména v kompilovaných jazycích. V interpretovaných už méně. Pokud by těch možností mělo být víc nebo by se měly průběžně měnit, bude výhodné použití nějaké databáze.

Nahoru Odpovědět
16.8.2012 8:56
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na David Hartinger
Theodor Johnson:16.8.2012 8:58

tohle mě ani nenapadlo, a je to vážně dobrý řešení, aspoň nemusim kopírovat podmínku pro jména obou hráčů

Nahoru Odpovědět
16.8.2012 8:58
Mo8ilε 15 Ѐλđ
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:16.8.2012 9:23

V interpretech mi to přijde také fajn, používám to velmi často v PHP, tam se dají s poli dělat psí kusy a velmi mi tento způsob programování vyhovuje.

Nahoru Odpovědět
16.8.2012 9:23
New kid back on the block with a R.I.P
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 29 zpráv z 29.