Kolmekomponentide operaatorid vs. kui muud väited

Tõenäoliselt olete juba kolm korda operaatorit (tuntud ka kui tinglause) näinud lähtefailis või kuskil mujal. C-s ja paljudes sarnaste süntaksidega keeltes kasutame? märk selle operaatori esindamiseks.

Enamikul algajatest (minu enda kogemuste põhjal) on seda operaatorit natuke raske mõista, ehkki nad on juba õppinud lauset if ja else. Ma usun, et selle põhjus on see, et seda on natuke raske lugeda ja kirjutada, sest sama rea ​​erinevate toimingute tegemine võib olla segane. Päriselt.

Tõenäoliselt teate juba, kuidas neid kasutada või vähemalt seda, kuidas lugeda ja mõista nende taga olevat loogikat. Kui te seda ei tee, aitab teid võib-olla järgmine „ilus” ASCII kunstiesitus, mille ma just teie jaoks koostasin.

       jah
   __ __ __ __
  | |
  | |
  | ^
seisukorras? õige Vale
  | ^
  | |
  | __ __ __ __ __ __ __ |
         ei

Kolmekomponendiline operaator esitab kolm argumenti. Esimene (1.) on tingimus, teine ​​(2.) täidetakse, kui tingimus on tõene, ja kolmas (3.), kui tingimus on vale.

Võõra ametiajal on see lihtsalt {if-else} avaldus ühes reas (1)!

Millal neid kasutada?

Isiklikult kasutan neid, kui soovin sõltuvalt olukorrast väärtuse muutujale seada. Näiteks oletame, et kui x == 42, siis tahan, et muutuja y oleks tõene. Kui x ei ole võrdne 42-ga, siis on muutuja y väärtus False.

Niisiis, kuidas ma seda kirjutan? Täpselt nii ...

bool y = (x == 42)? õige Vale;

Lihtne! Proovige ise järele. Ka siin on Pythoni versioon just seetõttu:

y = "õige", kui x == 42 veel "vale"

Kuidas oleks aga juhul, kui avaldusega?

Sel juhul ma vaidleksin vastu ja oleksin sellele vastu. Miks? Vaadake seda koodi:

bool y;
if (x == 42) {
  y = tõsi;
}
veel {
  y = vale;
}

Kolmekomponendilise operaatori jaoks tõlkimiseks teeksime seda järgmiselt:

? -> if (x == 42) {}
y -> tõsi;
: -> veel {}
y -> vale;

Nii et meil võib olla midagi sellist, eeldades, et soovite, et see oleks ühes reas:

bool y; if (x == 42) {y = true;} else {y = false;}

Mis on kole ja ebavajalik, sest me võime seda kirjutada nii:

bool y = (x == 42)? õige Vale;

Näete? Nii palju puhtam! Vähendasime seitse (7) koodirida ühele (1) reale. :)

Millal peaksin seda vältima?

Kolmekomponentide operaatorid on fantastilised, kuid neid pole alati vaja. Oletame, et soovite lihtsalt mõnda funktsiooni täita või teha mitu toimingut ... ärge kasutage kolmnurki.

Kumba eelistaksite?

if (x == 42) {
  std :: cout << "käivitatakse kood" << std :: endl;
  kood ();
}
veel {
  std :: cout << "midagi ei juhtunud" << std :: endl;
}

vs.

(x == 42)? ((std: cout << "kood täidetakse" << std :: endl), kood ()): (tühine) (std: cout << "midagi ei juhtunud" << std: endl);

Jah, nüüd on lihtne aru saada, miks.

Järeldus

  • Muutuja väärtuse määramiseks või vajaduse korral koodi vähendamiseks kasutage kolmekomponentseid operaatoreid.
  • Kõigi muu jaoks kasutage if-else avaldusi.