Operatori ternari Java

C’è un modo per implementarlo in un’operazione ternaria. Sono molto nuovo a quella roba ternaria, forse potresti guidarmi.

if(selection.toLowerCase().equals("produkt")) cmdCse.setVisible(true); else cmdCse.setVisible(false); 

Questo sembra non funzionare.

 selection.toLowerCase().equals("produkt")?cmdCse.setVisible(true):cmdCse.setVisible(false); 

    In questo caso, non hai nemmeno bisogno di un operatore ternario:

      cmdCse.setVisible(selection.toLowerCase().equals("produkt")); 

    Oppure, più pulito:

      cmdCse.setVisible(selection.equalsIgnoreCase("produkt")); 

    La tua versione:

     selection.toLowerCase().equals("produkt")? cmdCse.setVisible(true): cmdCse.setVisible(false); 

    è semanticamente scorretto: l’ operatore ternario dovrebbe rappresentare assegnazioni alternative , non è un sostituto completo delle dichiarazioni if . Questo va bene:

     double wow = x > y? Math.sqrt(y): x; 

    perché stai assegnando x o Math.sqrt(y) a wow , a seconda di una condizione .

    I miei 2cents: usa l’operatore ternario solo quando rende più chiaro il tuo programma, altrimenti finirai per avere degli one-liner indecifrabili.

    Forse

     cmdCse.setVisible(selection.toLowerCase().equals("produkt")); 

    L’operatore ternario non è esattamente come un’istruzione if. Un operatore ternario deve “restituire” qualcosa da entrambi i lati, quindi mettere invalide chiamate di metodo come setVisible () non funzionerà.

    Invece, si potrebbe fare qualcosa di simile senza operatori ternari:

     cmdCse.setVisible(selection.toLowerCase().equals("product")); 

    Ma solo per dimostrare il punto, l’equivalente ternario sarebbe simile a questo:

     cmdCse.setVisible(selection.toLowerCase().equals("product") ? true : false); 

    Nota come ora l’operatore ternario “restituisce” vero o falso su entrambi i lati invece di chiamare semplicemente un metodo vuoto.

    Penso che questo funzionerà per te

     cmdCse.setVisible(selection.toLowerCase().equals("produkt")); 

    Direttamente dai documenti

    Utilizzare l’operatore?: Invece di un’istruzione if-then-else se rende il codice più leggibile; ad esempio, quando le espressioni sono compatte e senza effetti collaterali (come i compiti).

    Nel tuo caso cmdCse.setVisible(true / false); non restituisce nulla, e l’operazione ha anche effetti collaterali (cambia stato di cmdCse ), quindi l’operatore condizionale non può essere usato qui (quando si usa l’operatore, entrambi i rami ? e : devono avere lo stesso tipo di ritorno ).

    Per inciso, per favore nota che .. ? .. : .. .. ? .. : .. dovrebbe essere indicato come l’ conditional operator

    Ecco i miei consigli, se hai bisogno di impostare cose per i booleani, quindi usa setBoolean (condition), altrimenti, se hai bisogno di impostare una variabile su un valore non booleano, usa var = condition? Result1: result2 (o la variabile se non vuoi cambiare se la condizione è falsa), altrimenti, usa se non altro.