CodeGym /Java blog /Tilfældig /Ternær operatør
John Squirrels
Niveau
San Francisco

Ternær operatør

Udgivet i gruppen
Hej! Dagens lektion bliver ikke særlig lang, men den vil helt sikkert være nyttig :) Vi skal tale om den såkaldte ternære operator . Ternær operatør - 1Ternær betyder " sammensat af tre dele ". Det er et alternativ til if-elsekontrolflow-erklæringen, som du allerede har opfyldt. Lad os give et eksempel. Antag, at nogen besluttede at gå til en R-bedømt film (under 17 kræver en ledsagende forælder eller voksen værge). Ordføreren tjekker sin alder ved døren: hvis han bestod alderskontrollen, får han lov til at komme ind; hvis ikke, sendes han hjem. Lad os erklære en Personklasse og kontrollere dette ved hjælp af en if-elseerklæring:

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);

   }
}
Konsoludgang:

"Everything is in order. Come in!"
Hvis vi fjerner konsoludgangen, ser vores check sådan ud:

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
Logikken er meget enkel her: en betingelse kontrolleres (alder >= 18) Baseret på resultatet tildeles variablen usherResponseen af ​​to strenge med betjentens svar. Sådanne situationer ("én betingelse - to mulige udfald") er ekstremt almindelige i programmering. Og det er derfor, den ternære operatør blev oprettet. Vi kan bruge det til at forenkle vores check til en enkelt kodelinje:

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);

}
Sådan fungerer denne operatør. Det kaldes den ternære operator, fordi det involverer 3 komponenter:
  • En betingelse ( person.getAge() > 18)
  • To mulige udfald ( "Alt er i orden. Kom ind!" og "Denne film passer ikke til din alder!" )
Først skriver vi betingelsen efterfulgt af et spørgsmålstegn.

person.getAge() > 18 ?
"Er denne persons alder mere end 18?" Så skriver vi den første værdi . Denne værdi bruges , hvis betingelsen evalueres tiltrue :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
Er denne persons alder mere end 18? Hvis ja, indstil usherResponse variablen til "Alt er i orden. Kom ind!" Dernæst kommer " :" symbolet og den anden værdi . Denne værdi bruges , hvis betingelsen evalueres tilfalse :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
Er denne persons alder mere end 18? Hvis ja, indstil usherResponse variablen til "Alt er i orden. Kom ind!" . Hvis ikke, skal du indstille usherResponse variablen til "Denne film er ikke egnet til din alder!" Generelt ser du sådan her den ternære operators logik ser ud. tilstand ? resultat 1 : resultat 2 Ternær operatør - 2 Parenteserne omkring betingelsen er i øvrigt ikke påkrævet: vi har tilføjet dem for større læsbarhed. Det fungerer også uden dem:

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);

}
Så hvad skal du bruge? En if-elseerklæring eller den ternære operator? Med hensyn til ydeevne er der ingen forskel. Mere præcist er der måske, men det er ligegyldigt. Den største overvejelse her er læsbarheden af ​​din kode. Koden du skriver skal ikke kun fungere korrekt, men også være let at læse . Det kan jo være "arvet" af andre programmører, dine kollegaer! Hvis det er svært at forstå, vil det komplicere deres og dit arbejde (de kommer løbende til dig for at få forklaringer hvert 5. minut). Den generelle anbefaling er denne: Hvis tilstanden er enkel og let verificeret, kan du bruge den ternære operatør uden skade. Dette lader dig reducere mængden af ​​kode og antallet afif-elseudsagn (og der er måske allerede mange af dem). Men hvis tilstanden er kompleks og involverer flere trin, er det bedre at bruge en if-elseerklæring. For eksempel ville det være en dårlig idé at bruge en ternær operator i dette tilfælde:

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
Det er ikke umiddelbart tydeligt, hvad der sker her! Koden er blevet meget svær at læse. Og alt på grund af den komplekse tilstand:
  • Hvis nogen er ældre end 18, har en billet (eller et frikort) og ingen små børn, kan han komme ind.
  • Hvis selv en del af tilstanden er falsk, så kan han ikke.
Her er det klart bedre at bruge if-else. Ja, vores kode bliver større, men den vil være meget mere læsbar. Og dine kolleger vil ikke se håndfladen i øjnene, hvis de arver denne kode :) Endelig kan jeg anbefale en god til dig. Vi kom ind på kodelæsbarhed i lektionen. Robert Martins bog "Clean Code", som er blevet en klassiker, er dedikeret til dette emne. Ternær operatør - 4Den samler bedste praksis og anbefalinger til programmører, som vil hjælpe dig med at skrive kode, der ikke kun er funktionel, men også let læselig.
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION