CodeGym /Blog Java /Aleatoriu /Operator ternar
John Squirrels
Nivel
San Francisco

Operator ternar

Publicat în grup
Bună! Lecția de azi nu va fi foarte lungă, dar cu siguranță va fi utilă :) Vom vorbi despre așa-numitul operator ternar . Operatorul ternar - 1Ternar înseamnă „ compus din trei părți ”. Este o alternativă la if-elseinstrucțiunea fluxului de control pe care ați întâlnit-o deja. Să dăm un exemplu. Să presupunem că cineva a decis să meargă la un film cu rating R (sub 17 ani necesită un părinte însoțitor sau un tutore adult). Usierul isi verifica varsta la usa: daca a trecut controlul de varsta, i se permite sa intre; dacă nu, este trimis acasă. Să declarăm o Personclasă și să verificăm acest lucru folosind o if-elseinstrucțiune:

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

   }
}
Ieșire din consolă:

"Everything is in order. Come in!"
Dacă eliminăm ieșirea consolei, atunci verificarea noastră arată astfel:

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
Logica este foarte simplă aici: se verifică o condiție (vârsta >= 18) Pe baza rezultatului, variabilei i se usherResponseatribuie unul dintre cele două șiruri de caractere cu răspunsul ușierului. Astfel de situații ("o condiție - două rezultate posibile") sunt extrem de frecvente în programare. Și de aceea a fost creat operatorul ternar. Îl putem folosi pentru a simplifica verificarea la o singură linie de cod:

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

}
Iată cum funcționează acest operator. Se numește operator ternar, deoarece implică 3 componente:
  • O condiție ( person.getAge() > 18)
  • Două rezultate posibile ( "Totul este în ordine. Intră!" și "Acest film nu este potrivit pentru vârsta ta!" )
Mai întâi, scriem condiția, urmată de un semn de întrebare.

person.getAge() > 18 ?
„Vârsta acestei persoane are mai mult de 18 ani?” Apoi scriem prima valoare . Această valoare este utilizată dacă condiția este evaluată latrue :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
Această persoană are vârsta mai mare de 18 ani? Dacă da, setați usherResponse variabila la „Totul este în ordine. Intră!” Urmează :simbolul " " şi a doua valoare . Această valoare este utilizată dacă condiția este evaluată lafalse :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
Această persoană are vârsta mai mare de 18 ani? Dacă da, setați usherResponse variabila la „Totul este în ordine. Intră!” . Dacă nu, setați usherResponse variabila la „Acest film nu este potrivit pentru vârsta ta!” În general, iată cum arată logica operatorului ternar. condiție ? rezultatul 1 : rezultatul 2 Operatorul ternar - 2 Apropo, parantezele din jurul condiției nu sunt necesare: le-am adăugat pentru o mai mare lizibilitate. Funcționează și fără ele:

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

}
Deci ce ar trebui să folosești? O if-elsedeclarație sau operatorul ternar? În ceea ce privește performanța, nu există nicio diferență. Mai exact, poate că există, dar este nesemnificativ. Cea mai mare considerație aici este lizibilitatea codului dvs. Codul pe care îl scrieți nu trebuie doar să funcționeze corect, ci și să fie ușor de citit . La urma urmei, ar putea fi „moștenit” de alți programatori, colegii tăi! Dacă e greu de înțeles, le va complica munca lor, și a ta (or să vină în fugă la tine pentru explicații la fiecare 5 minute). Recomandarea generală este următoarea: dacă starea este simplă și ușor de verificat, puteți utiliza operatorul ternar fără a dăuna. Acest lucru vă permite să reduceți cantitatea de cod și numărul deif-elsedeclarații (și ar putea fi deja multe). Dar dacă afecțiunea este complexă și implică mai mulți pași, este mai bine să folosiți o if-elsedeclarație. De exemplu, utilizarea unui operator ternar ar fi o idee proastă în acest caz:

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
Nu se vede imediat ce se întâmplă aici! Codul a devenit foarte greu de citit. Și totul din cauza stării complexe:
  • Dacă cineva are peste 18 ani, are un bilet (sau un permis gratuit) și nu are copii mici, poate intra.
  • Dacă chiar și o parte a condiției este falsă, atunci nu poate.
Aici este clar mai bine să utilizați if-else. Da, codul nostru va fi mai mare, dar va fi mult mai lizibil. Și colegii tăi nu se vor confrunta cu palma dacă moștenesc acest cod :) În sfârșit, pot recomanda un bun pentru tine. Am atins lizibilitatea codului în timpul lecției. Cartea lui Robert Martin „Cod curat”, devenită un clasic, este dedicată acestui subiect. Operatorul ternar - 4Acesta reunește cele mai bune practici și recomandări pentru programatori, care vă vor ajuta să scrieți cod care nu este doar funcțional, ci și ușor de citit.
Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION