CodeGym /Java blog /Véletlen /Háromtagú operátor
John Squirrels
Szint
San Francisco

Háromtagú operátor

Megjelent a csoportban
Szia! A mai lecke nem lesz túl hosszú, de mindenképpen hasznos lesz :) Szó lesz az úgynevezett ternary operátorról . Háromtagú operátor – 1Ternary jelentése " három részből áll ". Alternatívája a if-elsemár bevált vezérlőfolyamat-utasításnak. Mondjunk egy példát. Tegyük fel, hogy valaki úgy döntött, hogy R-besorolású filmet néz (17 éven aluli szülő vagy felnőtt gyám szükséges). A felügyelő az ajtóban ellenőrzi az életkorát: ha átment a korhatáron, beengedik; ha nem, akkor hazaküldik. Deklaráljunk egy Personosztályt, és ellenőrizzük ezt egy if-elseutasítással:

public class Person {

   private int age;

   public Person(int age) {
       this.age = age;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public static void main(String[] args) {

       Person person = new Person(22);

       String usherResponse;

       if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }

       System.out.println(usherResponse);

   }
}
Konzol kimenet:

"Everything is in order. Come in!"
Ha eltávolítjuk a konzolkimenetet, akkor az ellenőrzésünk így néz ki:

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
A logika itt nagyon egyszerű: az egyik feltételt ellenőrizzük (életkor >= 18) Az eredmény alapján a változóhoz usherResponsekét karakterlánc egyikét rendeljük hozzá az usher válaszával. Az ilyen helyzetek („egy feltétel – két lehetséges kimenetel”) rendkívül gyakoriak a programozásban. És ezért jött létre a hármas operátor. Segítségével leegyszerűsíthetjük ellenőrzésünket egyetlen kódsorra:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
Így működik ez az operátor. Háromtagú operátornak hívják, mert 3 összetevőből áll:
  • Egy feltétel ( person.getAge() > 18)
  • Két lehetséges kimenetel ( "Minden rendben van. Gyere be!" és "Ez a film nem felel meg a korodnak!" )
Először a feltételt írjuk, majd egy kérdőjel.

person.getAge() > 18 ?
– Ez a személy 18 évesnél idősebb? Ezután írjuk az első értéket . Ez az érték akkor használatos, ha a feltétel kiértékelésetrue :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
Ez a személy 18 évesnél idősebb? Ha igen, állítsa a usherResponse változót "Minden rendben van. Gyere be!" Ezután jön a " :" szimbólum és a második érték . Ez az érték akkor használatos, ha a feltétel kiértékelésefalse :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
Ez a személy 18 évesnél idősebb? Ha igen, állítsa a usherResponse változót "Minden rendben van. Gyere be!" . Ha nem, állítsa a usherResponse változót "Ez a film nem felel meg az életkorodnak!" Általában így néz ki a háromtagú operátor logikája. feltétel ? 1. eredmény : 2. eredmény Háromtagú operátor – 2 A feltétel körüli zárójeleket egyébként nem kell megadni: a jobb olvashatóság érdekében hozzáadtuk őket. Ezek nélkül is működik:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
Tehát mit kell használni? Egy if-elsenyilatkozat vagy a hármas operátor? A teljesítmény szempontjából nincs különbség. Pontosabban talán van is, de ez jelentéktelen. A legnagyobb szempont itt a kód olvashatósága. A megírt kódnak nemcsak megfelelően kell működnie, hanem könnyen olvashatónak is kell lennie . Hiszen lehet, hogy más programozók, kollégái "örökölték"! Ha nehéz megérteni, az megnehezíti a dolgukat, és az Önét is (5 percenként futnak hozzád magyarázatért). Az általános ajánlás a következő: ha a feltétel egyszerű és könnyen ellenőrizhető, akkor a hármas operátort károsodás nélkül használhatja. Ezzel csökkentheti a kód mennyiségét és számátif-elsenyilatkozatok (és lehet, hogy már sok van belőlük). De ha a feltétel összetett és több lépésből áll, jobb, ha egy if-elseutasítást használ. Például egy háromtagú operátor használata rossz ötlet ebben az esetben:

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
Nem azonnal látszik, mi történik itt! A kód nagyon nehezen olvashatóvá vált . És mindez a bonyolult állapot miatt:
  • Ha valaki 18 évesnél idősebb, van jegye (vagy ingyenes bérlete), és nincs kisgyermeke, akkor bejöhet.
  • Ha a feltételnek csak egy része is hamis, akkor nem tudja.
Itt egyértelműen jobb a használata if-else. Igen, a kódunk nagyobb lesz, de sokkal olvashatóbb lesz. És a kollégáid sem tenyérrel néznek szembe, ha öröklik ezt a kódot :) Végül ajánlhatok egy jót. Az órán érintettük a kód olvashatóságát. Robert Martin „Clean Code” című, klasszikussá vált könyve ennek a témának szól. hármas operátor – 4A programozóknak szóló bevált gyakorlatokat és ajánlásokat gyűjti össze, amelyek segítségével nemcsak működőképes, hanem könnyen olvasható kódot is írhat.
Hozzászólások
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION