Autor Zpráva
jouza
Profil
Zdravím, začínám s js, a na webu jsem našel tento jednoduchý kod, jen bych se chtěl zeptat, proč tam musí být ty zvýrazněné závorky, jaký mají účel ?
Díky


var d = new Date();
if ((d.getHours() >= 5) && (d.getHours() <= 9))
        document.write("Dobré ráno");
else if ((d.getHours() >= 10) && (d.getHours() <= 11))
        document.write("Dobré dopoledne");
else if ((d.getHours() == 12))
        document.write("Dobré poledne");
else if ((d.getHours() >= 13) && (d.getHours() <= 17))
        document.write("Dobré odpoledne");
else if ((d.getHours() >= 18 && (d.getHours() <= 21))) // tu to je celé nějaké divné, (ty závorky)
        document.write("Dobré odpoledne");
else
        document.write("Dobrou noc");
juriad
Profil
Syntaxe konstrukce if vyžaduje podmínku obalenou závorkami:
if (podmínka) příkaz

V tvém případě je podmínka:
(d.getHours() >= 5) && (d.getHours() <= 9)
Tady by šlo závorky vypustit (a běžně se to dělá):
d.getHours() >= 5 && d.getHours() <= 9
jouza
Profil
Díky za rychlou odpověď, vím, že u příkazu if se používá tato syntaxe if(podmínka) příkaz
proto mě tam překvapila ta jedna závorka navíc, a u toho "Dobré odpoledne", tam už mi ty závorky nedávaj žádný smysl ..


var d = new Date();

if (d.getHours() >= 5) && (d.getHours() <= 8)         
     document.write("Dobré ráno");
else if (d.getHours() >= 8) && (d.getHours() < 12)
     document.write("Dobré doledne");
else if (d.getHours() >= 12) && (d.getHours() <= 17)
     document.write("Dobré odpoledne");
else if (d.getHours() >= 17) && (d.getHours() <= 23)
     document.write("Dobrý večer");
else 
     document.write("dobrou noc");

Takhle jsem si to zkoušel napsat já, ale moc to nefunguje.
xROAL
Profil
jouza:
if (d.getHours() >= 5 && d.getHours() <= 8)
nie
if (d.getHours() >= 5) && (d.getHours() <= 8) (prvá zvýraznená zátvorka ukončí IF)
jouza
Profil
Díky, ale popravdě moc mi to nepomohlo, všude je něco jiného ...

if (d.getHours() >= 5 && d.getHours() <= 8) //#1
if ((d.getHours() >= 5) && (d.getHours() <= 9)) //#2
if ((d.getHours() >= 18 && (d.getHours() <= 21))) //#3

Takže správně to je if(podmínka && podmínka) příkaz chápem to už správně ?
TomášK
Profil
Správně je if (podmínka) příkaz. Podmínka může být:
- fakt (např. true)
- výraz vracející podmínku (např. 1 == 1)
- složená (např. podmínka && podmínka)
- podmínka v závorkách (např. (podmínka))
- ?možná jsem na něco zapomněl

Pomocí těchto pravidel jde vytvořit libovolně složitou podmínku, která jde umístit do ifu.

d.getHours() >= 5 && d.getHours() <= 8
- složená podmínka, ze dvou výrazů
(d.getHours() >= 5 && d.getHours() <= 8)
- uzávorkovana složená podmínka, ze dvou výrazů
(((((d.getHours() >= 5) && d.getHours() <= 8))))
- tohle je též v pořádku
juriad
Profil
První možnost používá minimální možný počet závorek.
Druhá možnost obalila porovnání závorkami:
if ((d.getHours() >= 5) && (d.getHours() <= 9)) //#2
Třetí obalila druhé porovnání závorkami a celou podmínku závorkou:
if ((d.getHours() >= 18 && (d.getHours() <= 21))) //#3

Vezmi si to jako aritmetiku, také můžeš použít závorky, ale ve všech níže zmíněných připadech je to to samé:
(1+2)+(3+4) = (1+2+3+4) = (1+(2+(3+4))) = 1+((2)+(3+4)) = ((1)+(2+((3)+4)))

V JS má operátor porovnání větší prioritu než &&; porovnání tedy v aritmetickém výrazu hraje roli *, && hraje roli +:

A * B + C * D //#1
(A * B) + (C * D) //#2
(A * B + (C * D)) //#3

Jiný význam by ta podmínka měla při odlišném uzávorkování, například:
(A * (B + C * D))
jouza
Profil
Díky už je mi to jasnější, jen bych se chtěl ještě zeptat. Podle toho co jste psali, by mi můj kod měl fungovat ne ? Je to na principu (A * B) + (C * D) ne ?

xROAL:
if (d.getHours() >= 5 && d.getHours() <= 8)
nie
if (d.getHours() >= 5) && (d.getHours() <= 8) (prvá zvýraznená zátvorka ukončí IF)

Tak proč mi to teda nejde ?

pro přehlednost ho tu hodím, ještě jednou:

var d = new Date();

if (d.getHours() >= 5) && (d.getHours() <= 8)         
     document.write("Dobré ráno");
else if (d.getHours() >= 8) && (d.getHours() < 12)
     document.write("Dobré doledne");
else if (d.getHours() >= 12) && (d.getHours() <= 17)
     document.write("Dobré odpoledne");
else if (d.getHours() >= 17) && (d.getHours() <= 23)
     document.write("Dobrý večer");
else 
     document.write("dobrou noc");



Když kod poupravím podle xROAL, tak mi to funguje


Myslím, že už to mám, to buď musím celé ještě obalit do závorek

if ( (d.getHours() >= 5) && (d.getHours() <= 8)  )  
     
     document.write("Dobré ráno");

a nebo tak jak říkal roal, ale čekal bych, že to půjde i takhle, jak to mám, ale nejde

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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