Go Down

Topic: Pulizia codice con operatore ternario... (Read 297 times) previous topic - next topic

manolomao

Sono uno zuccone, ma questo operatore ternario non mi entra in testa...
Sto cercando di pulire il codice, ed arrivo a questa serie di istruzioni:
Code: [Select]
if (retro){analogWrite(lampeggio,255);}  //retroilluminazione
  else{analogWrite(lampeggio,0);}

Posso semplificare in questo caso??
Mi spiegate meglio come usare il ternario??
Grazie

maubarzi

retro ? analogWrite(lampeggio,255) : analogWrite(lampeggio,0)
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!


gpb01

#3
Jun 18, 2019, 12:53 pm Last Edit: Jun 18, 2019, 01:57 pm by gpb01
Posso semplificare in questo caso??
Cosa pensi di semplificare ? ? ? Tutt'al più rendi il codice meno leggibile ... il compilatore se ne frega ed il risultato è identico.

La cosa corretta, che risponde a tutti gli standard, invece che quello che hai scritto, è scrivere:

Code: [Select]
/* verifica retroilluminazione */
if (retro) {
  analogWrite(lampeggio,255);
}
else {
  analogWrite(lampeggio,0);
}

Guglielmo
Search is Your friend ... or I am Your enemy !

Silente

Ma ragazzi, domanda
analogWrite (lampeggio, (retro*255));
Va bene?
Dove va un numero va una variabile o una funzione. E dove va una boolean va un insieme di test.

Se vuoi ottenere devi saper spiegare

In pochi capiscono l'importanza di formattare, sii tra di essi

fabpolli

#5
Jun 18, 2019, 01:50 pm Last Edit: Jun 18, 2019, 01:51 pm by fabpolli
Ma ragazzi, domanda
analogWrite (lampeggio, (retro*255));
Va bene?
Se retro è bool si, se è byte o int o long o ecc devi essere certo che i possibili valori assegnati siano solo o zero o uno.
In quanto a leggibilità comunque è certamente meglio la soluzione di Guglielmo

Standardoil

Se anche fosse int, MA, fosse l'esito di un test, sarebbe come se fosse bool
Che in 'c' non esiste, ma questa è altra storia...
Prima legge di Nelson (che sono io): Non scambiare il fine con il mezzo: ricorda "cosa" devi fare, non "come" devi farlo

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

Standardoil

#7
Jun 18, 2019, 01:59 pm Last Edit: Jun 18, 2019, 02:02 pm by Standardoil
Cia' dai aggiungiamo un suggerimento allo 'aiutatemi ad aiutarvi'
L'operatore ternario è sconsigliato.


UNDICESIMO COMANDAMENTO
Non commetterai terniarizzazione!
Non col tuo pc ne con la tua tastiera
Non col pc di altri ne con la tastiera di altri
Non col tuo IDE ne con lo IDE del tuo vicino

Santifica il sabato e via così..
.

Mai che trovo le faccine, sul furbofono
Prima legge di Nelson (che sono io): Non scambiare il fine con il mezzo: ricorda "cosa" devi fare, non "come" devi farlo

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

fabpolli

Concordo che il ternario è veramente poco leggibile, soprattutto se la condizione di test non è secca (Es. variabile bool) c'è e a qualcosa serve, come il goto... :D ma è meglio lasciarlo a quel qualcosa :smiley-twist:

fabpolli

Se anche fosse int, MA, fosse l'esito di un test, sarebbe come se fosse bool
Che in 'c' non esiste, ma questa è altra storia...
Yes, ma nell'esempiio di Silente è un'operazione quindi ho preferito fargli porre l'attenzione su possibili "effetti avversi"

Silente

Vero, grazie della correzione, non ci avevo pensato
analogWrite (lampeggio, ((retro==1)*255));
Poi noni ricordo mai, analogWrite va fino a 255 o 511?
Dove va un numero va una variabile o una funzione. E dove va una boolean va un insieme di test.

Se vuoi ottenere devi saper spiegare

In pochi capiscono l'importanza di formattare, sii tra di essi

Standardoil

#11
Jun 18, 2019, 02:15 pm Last Edit: Jun 18, 2019, 02:16 pm by Standardoil
Guarda, io mi sto scrivendo, a tempo perso delle macro di tastiera, tipo quelle di Autoit nella finestra
E per la if mi mette anche la else con le due graffe su due linee differenti
Basta come indice di quanto sono kosher?
Edit rispondevo a fabpolli
Prima legge di Nelson (che sono io): Non scambiare il fine con il mezzo: ricorda "cosa" devi fare, non "come" devi farlo

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

fabpolli

Vero, grazie della correzione, non ci avevo pensato
analogWrite (lampeggio, ((retro==1)*255));
Poi noni ricordo mai, analogWrite va fino a 255 o 511?
Sbagliato, ritenta  :)
Prova a pensare che retro (non di tipo bool altrimenti non serve) possa valere:
0
1
123
e tu vuoi ottenere o zero o 255

fabpolli

Poi noni ricordo mai, analogWrite va fino a 255 o 511?
Use il reference Luke!  :)

analogWrite

parameters
value: ...

docdoc

Premesso che non mi è mai piaciuto il ternario e che se di fatto non fornisce praticamente alcun vantaggio in termini di dimensione o velocità del codice (quindi a cosa serve?), volendo proprio fare qualcosa di apparentemente più compatto in questo caso farei:


analogWrite(lampeggio, (retro>0)*255);

oppure, meglio, farei "bool retro" (non so se sia così) e:

analogWrite(lampeggio, retro*255);
Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

Go Up