Avatar
Theodor Johnson
Redaktor
Avatar
Theodor Johnson:

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
Přecházím na "Cross-Platform Development"
Avatar
Kit
Redaktor
Avatar
Odpovídá na Theodor Johnson
Kit:

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
Redaktor
Avatar
Odpovídá na Theodor Johnson
matesax:

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
Redaktor
Avatar
Odpovídá na Theodor Johnson
matesax:

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
Redaktor
Avatar
Odpovídá na matesax
Theodor Johnson:

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
Přecházím na "Cross-Platform Development"
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:

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
Redaktor
Avatar
Odpovídá na Theodor Johnson
matesax:

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
Redaktor
Avatar
Odpovídá na Kit
matesax:

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
Redaktor
Avatar
Odpovídá na matesax
Kit:

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
Redaktor
Avatar
Odpovídá na matesax
Kit:

'==' 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
Redaktor
Avatar
Odpovídá na Kit
matesax:

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
Redaktor
Avatar
Odpovídá na Kit
matesax:

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
Redaktor
Avatar
Odpovídá na Kit
matesax:

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
Redaktor
Avatar
Odpovídá na Kit
Theodor Johnson:

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
Přecházím na "Cross-Platform Development"
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:

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
Redaktor
Avatar
Odpovídá na Kit
Theodor Johnson:

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

Nahoru Odpovědět 16.8.2012 8:26
Přecházím na "Cross-Platform Development"
Avatar
matesax
Redaktor
Avatar
Odpovídá na Theodor Johnson
matesax:

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
Redaktor
Avatar
Odpovídá na Theodor Johnson
Kit:

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
Redaktor
Avatar
Odpovídá na matesax
Kit:

... 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
Redaktor
Avatar
Odpovídá na Kit
Theodor Johnson:

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
Přecházím na "Cross-Platform Development"
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:

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
Redaktor
Avatar
Odpovídá na Theodor Johnson
Kit:

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
Redaktor
Avatar
Odpovídá na Kit
Theodor Johnson:

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
Přecházím na "Cross-Platform Development"
Avatar
matesax
Redaktor
Avatar
Odpovídá na Theodor Johnson
matesax:

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

 
Nahoru Odpovědět 16.8.2012 8:44
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Kit:

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
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

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
Redaktor
Avatar
Odpovídá na David Čápka
Theodor Johnson:

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
Přecházím na "Cross-Platform Development"
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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.