Elloddicevo io che ho un tropismo....
Naturalmente Guglielmo
Se si è offeso amen
Guglielmo, ti sei offeso?
Standardoil:
Guglielmo, ti sei offeso?
E de che ? ? ?
![]()
Guglielmo
docdoc:
Ad esempio ora che ho conosciuto meglio Standardoil so che in fondo non è cattivo, lo disegnano così, e ci capiamo di più...
grazie
... cattivo ? ... perche' cattivo ? ... non ha ancora fatto fuori nessuno ... (o per lo meno, fin'ora la notizia ancora non e' uscita su alcun giornale, e neppure al tiggi ...
:D)
Guglielmo: si possono incavolare finche' vogliono ... se mi scrivi una riga o due di pseudocodice, ci puo anche stare che non usi il tag code, ma mi sembra abbastanza logico che se mi postano una parte di codice e vogliono evitare di trovarlo pieno di faccine (:P), il "code" lo devono usare per forza ...
Altrimenti la prossima volta che uno posta una parte di codice non nei tag chiedendo perche' non funziona, e magari in mezzo c'e' la solita faccina (tipo "if (a == 8)" ...), mi sentirei abbastanza tentato da rispondergli "non funziona perche' il compilatore non riconosce gli emoticons come codice valido" ...
![]()
Etemenanki:
... cattivo ? ... perche' cattivo ? ... non ha ancora fatto fuori nessuno ... (o per lo meno, fin'ora la notizia ancora non e' uscita su alcun giornale, e neppure al tiggi ...![]()
:D)
ho eliminato anche giornalisti, testimoni e parenti, tu esattamente dov'è che abiti?
Standardoil:
ho eliminato anche giornalisti, testimoni e parenti, tu esattamente dov'è che abiti?
E basta un po', che poi Giacomo si incazza! ![]()
docdoc:
E basta un po', che poi Giacomo si incazza!
Esatto >:( >:( >:( >:( >:(
Guglielmo
https://forum.arduino.cc/index.php?topic=539949.msg3680225#msg3680225
ne avevo appena finito di scrivere...
il ballo ricomincia
Standardoil:
ne avevo appena finito di scrivere...
Parli della riga if(valore_stato_DT == HIGH) ?
Secondo il principio di Nelson, ah no...
Secondo il principio del codice autodocumentante ogni cosa dovrebbe risultare la più esplicita ed evidente possibile, senza bisogno di doversi porre domande su cosa / come / dove / perché / quando.
Una variabile booleana dovrebbe essere sempre assimilabile ad una domanda a cui si può rispondere si o no, come 'acceso?', 'interrotto?', 'finito?' (naturalmente nell'if il punto di domanda è sottointeso). In tal caso il confronto con true/false è inutile/ridondante, mentre con HIGH/1 o LOW/0 è effettivamente cacofonico: if(acceso == HIGH)
Se invece una variabile non è una domanda, come 'valore_stato', è vero che vale sempre la regola se diversa da zero allora è true, ma la condizione esplicita secondo me migliora la leggibilità, soprattutto se riguarda i livelli delle porte.
Certo che se una variabile non c'entra con i livelli delle porte, non è una domanda, e la si confronta con HIGH/LOW, ecco, questo è di nuovo cacofonico...
Se non sbaglio si dovrebbe usare:
true/falsesolo con variabili booleane espresse come domandaHIGH/LOWsolo per variabili (o condizioni) che riguardano i livelli delle porte0/1e altri numeri solo con variabili che rappresentano numeri (con l'eccezione di espressioni logiche bitwise)
In ogni caso.... nessun principiante può rendersi conto dell'importanza stilistica di queste convenzioni (come dell'indentazione ecc ecc). E vale anche per non principianti, neo laureandi e professionisti scrivono codice altrettanto "malformato".
Si, intendevo quello, ma anche dell'uso della variabile stessa, che non serve
Li ci sono anche altri problemi, ma nella sola ISR ne ho visti tre di spunti di discussione
... dubbio personale (dato che si parla di "modi di scrivere" codice) ...
if (a==LOW)
if (a==FALSE)
if (!a)
... scritte in questo modo ... sono equivalenti ? ... il compilatore le interpreta poi in modo identico ? ... (e soprattutto, la terza e' ammissibile, oppure ho scritto la solita ca...volata ? ... :D)
False minuscolo
La terza è meravigliosa, non una cappellata
Standardoil:
Si, intendevo quello, ma anche dell'uso della variabile stessa, che non serve
Li ci sono anche altri problemi, ma nella sola ISR ne ho visti tre di spunti di discussione
Sull'ISR hai ragione, deve essere più corta e veloce possibile, quello che secondo me ti sfugge è che un utente che non ha, evidentemente, dimestichezza con la programmazione, lo deduco dal fatto che in un codice così corto salta all'occhio di chi ha anche poca dimestichezza che i==2 non veniva mai eseguito, con le tue correzioni si limita a fare copia, incolla funziona ok e non capisce.
Se tu fossi a parlare con "esperti" allora avrebbe senso, con il livello di chi approccia Arduino alle prime armi questi discorsi sono, a mio modestissimo parere, solo "language nazi"
Pià che alla "perfezione" del codice intesa come performance/correttezza forse è più utile guidare gli utenti poco esperti a comprendere la logica della programmazione e poi se interessati approfondiranno e arriveranno al livello a cui tu stai puntando a farli arrivare
Credo tu abbia ragione, devo fare un po' di autocritica
Etemenanki:
... scritte in questo modo ... sono equivalenti ? ... il compilatore le interpreta poi in modo identico ?
Sono equivalenti come valutazione finale della condizione (anche considerando che false e LOW sono semplicemente 0 chiamato con un altro nome).
Forse l'ultima è più ottimizzata perché non comporta un confronto tra due operandi.
In quanto a leggibilità bisogna vedere in che contesto sono poste:
if (a==LOW) <-- accettabile se 'a' riguarda un livello hardware
if (a==0) <-- accettabile se 'a' è un numero
if (a==false) <-- poco accettabile, 'a' non è una domanda chiara,
se lo fosse il confronto con false sarebbe ridondante
if (!a) <-- accettabile se 'a' fosse una domanda chiara,
oppure se 'a' fosse un operando di una espressione
btwise come: !a & (b | !c)
Ripeto che comunque per un principiante sono questioni "zen" quasi incomprensibili ![]()
Sull'indentazione invece sono più intransigente, non è solo questione di chiarezza mentale, ma anche di rispetto verso chi deve leggere (non capisco chi trova sconveniente l'indentazione obbligatoria in Python, visto che si dovrebbe comunque già scrivere così in qualsiasi linguaggio, e le parentesi allora rimangono solo una mera necessità imposta dal compilatore).
Claudio_FF:
... accettabile se 'a' fosse una domanda chiara ...
Piu che altro, il controllo "diretto" dello stato di un pin, nel caso che avevo in mente io ... e' perche' in moltissimi esempi vedo istruzioni che prima leggono un pin, ne mettono lo stato in una variabile, poi fanno controlli con if o while sulla variabile, e non la usano piu da nessun'altra parte (ed a volte nei while non la rileggono neppure, per cui il while poi non gli funziona piu) ... per cui mi chiedevo se, in caso fosse necessario controllare lo stato di un pin per vedere se va a massa, ad esempio, si potesse fare un controllo diretto di una digitalRead "negata", tipo ad esempio
if (!digitalRead(pin)) ...
oppure
while (!digitalRead(pin)) ...
e farlo senza che il compilatore ti bestemmi dietro (in ostrogoto, con sottotitoli in serbo-croato :P) perche' stai cercando di fare qualcosa che lui non accetta o non riconosce ...
EDIT: l'indentazione secondo me serve alla "leggibilita' del listato" piu che alla programmazione ... il che non significa che non vada usata bene, almeno se ci si tiene a capirci qualcosa di quello che si scrive ![]()
Etemenanki:
se, in caso fosse necessario controllare lo stato di un pin per vedere se va a massa, ad esempio, si potesse fare un controllo diretto di una digitalRead "negata"
Si fa normalmente, perché la digitalRead ritorna comunque 0 o 1.
L'unica cosa che non mi piace di quella forma (e di tutte le altre condizioni in cui si usa HIGH/LOW in modo implicito o esplicito) è che non è immediatamente evidente quale sia il significato di quel livello basso (o alto), infatti può essere sia pulsante premuto che rilasciato a seconda se viene collegato in pull-up o pull-down. In tal caso preferisco usare una define o una costante parlante esplicita:
#define LIVELLO_PREMUTO LOW
while(digitalRead(pin) == LIVELLO_PREMUTO) ...
E non ci si sbaglia mai nell'interpretare cosa sta testando quella condizione.
Claudio_FF:
Si fa normalmente, perché ladigitalReadritorna comunque 0 o1.#define LIVELLO_PREMUTO LOW
while(digitalRead(pin) == LIVELLO_PREMUTO) ...
E non ci si sbaglia mai nell'interpretare cosa sta testando quella condizione.
Che è verissimo, ma a me non piace, a livello epidermico
di solito io prima definisco la parte HW , e qui sono quasi fiscalissimo
tensione alta segnale presente pulsante premuto teleruttore chiuso
troppe volte da giovane tecnico ho dovuto "capire" al volo che il comando dal coso per cosare le cose era negato, negati sono i progettisti che fanno caxate del genere, dal mio punto di vista
decisa la parte HW il SW è quasi cristallino....
Standardoil:
False minuscolo
... purtroppo dipende anche dall'ambiente di sviluppo ... nell'IDE di Arduino SI, si usa false in altri ambienti NO, si usa FALSE ... :![]()
Guglielmo