Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java sulkeiden käyttö

hevonen [14.10.2008 21:07:45]

#

Milloin kaarisulkeet ovat välttämättömiä If ja while lauseissa Javassa?

Olen huomannut, että välillä koodi kääntyy, vaikka jätän kaarisulkeet pois, mutta välillä ei. Kaarisulkeet ovat osoittautuneet välttämättömiksi silloin, kun on useita while ja for silmukoita sisäkkäin.

Onko Javassa sääntöä, milloin sulkeet ovat pakolliset?

Metabolix [14.10.2008 21:15:19]

#

Puhut varmaankin aaltosulkeista {} etkä kaarisulkeista (). Kaarisulkeet ovat aina pakolliset mainituissa lauseissa. Aaltosulkeet sen sijaan rajaavat koodilohkon, eli niitä täytyy käyttää, jos ehto koskee useampaa koodilausetta.

if (a == 10) // Ei aaltosulkua, vain seuraava lause kuuluu ehdon piiriin
  b = 11; // if (a == 10)
c = 12; // Tämä rivi suoritetaan aina, koska sulkuja ei ole!
if (a == 10) { // Suoritetaan koko sulkujen rajaama lohko
  b = 11;
  c = 12;
} // ... tähän sulkuun asti.
if (a == 10) { } // Sulut alkavat ja loppuvat, eli ei suoriteta mitään!
b = 11; // Nämä rivit suoritetaan siis ehdosta riippumatta.
c = 12;

Sisennyshän ei vaikuta asiaan, vaan rajaus täytyy aina tehdä juuri suluilla. Sisennyksen tarkoitus on vain selventää koodia. (Python-kielessä sen sijaan merkitään lohkotkin vain sisennyksillä, jolloin sulut eivät ole tarpeen.) Kussakin kielessä on tietyt säännöt, joiden perusteella koodin jäsentely on yleensä yksiselitteisesti määritelty, kuten on tässä tapauksessa. Jos näin ei ole, kielen standardissa (paksussa opuksessa, joka määrittelee koko kielen) tavataan mainita asiasta. Esimerkiksi seuraava lause ei ainakaan C:ssä ole yksiselitteinen eikä siksi suositeltava, vaikka syntaksi onkin täysin oikea:
taulu[i++] = (i++) + (i++);

hevonen [14.10.2008 22:04:56]

#

Kiitos!
Tuo selvensi paljon.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta