n° 219
Novembre 2017
Dicembre 13, 2017, 05:20:58 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Anteporre o posporre le costanti all'operatore di comparazione ?  (Letto 1673 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
vuott
Newbie
*

Karma: +2/-1
Scollegato Scollegato

Messaggi: 31


Mostra profilo
« inserita:: Maggio 20, 2017, 07:22:45 »

Varie volte mi è capitato di leggere che è sempre preferibile anteporre le costanti all'operatore di comparazione.
Vedasi ad esempio uno per tutti quanto scritto qui dall'ottimo M.A.W. 1968 (venerando e terribile, come Parmenide):
https://www.iprogrammatori.it/forum-programmazione/cplusplus/copia-input-output-tagliando-gli-spazi-principiante-t31084.html#p8574554

Recentemente un utente del forum www.iprogrammatori.it mi ha contestato questa mia riga:
Codice:
while (10 > n)
(laddove "n" è ovviamente una semplice una variabile locale).

Vorrei capire meglio se la preferibilità dell'anteposizione della costante sia da riferisi solo al caso di uso per essa di identificatori oppure anche nel caso di numeri espliciti (come quello mio sopra), e quindi in ogni caso..

Vi ringrazio.
Registrato
M.A.W. 1968
** LEGGETE IL REGOLAMENTO ! **
Global Moderator
Hero Member
*****

Karma: +224/-19
Scollegato Scollegato

Messaggi: 2988


Discrete And Combinatorial Mathematics


Mostra profilo WWW
« Risposta #1 inserita:: Maggio 20, 2017, 09:17:54 »

Le ragioni per cui le migliori coding guides C suggeriscono di anteporre le costanti (e, in generale, tutto ciò che non può essere un lvalue) quando si utilizza l'operatore di confronto == sono decisamente intuitive e sono state richiamate un'infinità numerabile di volte fin dai tempi gloriosi di FIDOnet.
Si veda, ad esempio, questo post.

Codice:
int numero = 2;
// Al contrario per controllare se la variabile int è uguale a un numero o
// se una stringa è uguale a un carattere si mette il doppio uguale
if (numero == 2)
if (strigna == "Ciao")

Ecco, appunto, due ottimi esempi di cose da non fare in C.

La prima è sconsigliata, specialmente ai beginnners: nei confronti tramite operatore == le costanti, e in generale qualsiasi cosa non sia un lvalue, saranno opportunamente anteposte all'operatore, ossia posizionate a sinistra.
Perché ? Perché in questo modo si trasforma un eventuale errore semantico (una assegnazione in luogo di un confronto !) in un banale errore sintattico intercettabile dal compilatore (una assegnazione ad una espressione che non può essere un lvalue).
Codice:
if (5 == myvar)

In questo modo, quando il programmatore da strapazzo inevitabilmente scriverà
Codice:
   if (5 = myvar)
Sarà il compilatore ad inveire, lamentando che l'assegnazione ha come destinazione una costante e generando un errore "not a valid lvalue".

Per tali ovvie ragioni, ciò si applica unicamente all'operatore di confronto == e non riguarda invece l'uso di operatori d'ordine come < e >, per i quali l'ordine degli operandi è sostanzialmente irrilevante, rendendo quindi in questo caso leggermente preferibile la notazione più intuitiva e maggiormente leggibile.


venerando e terribile, come Parmenide

Già, ma al contrario del buon vecchio Parmenide ho avuto il merito e l'onore di poter seguire, tra i tanti, anche un bel paio di corsi sull'ontologia quadridimensionale degli oggetti materiali in uno dei templi mondiali della logica e della filosofia formale, quindi entro una teoria assiomatica dei modelli di riferimento dello spaziotempo sono in grado di fornire una decente definizione operativa e formale di "divenire", e conseguentemente anche di separazione tra eidos e materia che supera e concilia la sua disputa con Eraclito... Ghigno
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.

Un blog? Io? Occhiolino
AldoBaldo
Newbie
*

Karma: +0/-4
Scollegato Scollegato

Messaggi: 28


Mostra profilo E-mail
« Risposta #2 inserita:: Maggio 20, 2017, 10:51:19 »

M.A.W. 1968: "ho avuto il merito e l'onore di poter seguire, tra i tanti, anche [...] e concilia la sua disputa con Eraclito"

Ok, dunque proprio come fosse antani. Quel che non capisco è da che parte va lo scappellamento, né se la tapiòca sia in questo caso tarapìa oppure no... Ghigno

P.S. Caso mai non fosse chiaro: sto scherzando e non ho intenzioni offensive.
Registrato

Ma cosa vuoi che ne sappia? Io col codice ci gioco, mica ci lavoro!
AldoBaldo
Newbie
*

Karma: +0/-4
Scollegato Scollegato

Messaggi: 28


Mostra profilo E-mail
« Risposta #3 inserita:: Maggio 20, 2017, 10:52:47 »

Dimenticavo: grazie per il suggerimento del trucchetto con le costanti e l'operatore d'identità.
Registrato

Ma cosa vuoi che ne sappia? Io col codice ci gioco, mica ci lavoro!
vuott
Newbie
*

Karma: +2/-1
Scollegato Scollegato

Messaggi: 31


Mostra profilo
« Risposta #4 inserita:: Maggio 20, 2017, 11:06:21 »

Per tali ovvie ragioni, ciò si applica unicamente all'operatore di confronto == e non riguarda invece l'uso di operatori d'ordine come < e >, per i quali l'ordine degli operandi è sostanzialmente irrilevante, rendendo quindi in questo caso leggermente preferibile la notazione più intuitiva e maggiormente leggibile.
Ti ringrazio davvero molto.  Sorriso



un bel paio di corsi sull'ontologia quadridimensionale degli oggetti materiali in uno dei templi mondiali della logica e della filosofia formale, quindi sono in grado di dare una decente definizione operativa e formale di "divenire"
Neppure la Metafisica di Lui, Aristotele, riuscirebbe dunque ad uscirne indenne.    Ghigno
Registrato
M.A.W. 1968
** LEGGETE IL REGOLAMENTO ! **
Global Moderator
Hero Member
*****

Karma: +224/-19
Scollegato Scollegato

Messaggi: 2988


Discrete And Combinatorial Mathematics


Mostra profilo WWW
« Risposta #5 inserita:: Maggio 20, 2017, 11:57:34 »

Neppure la Metafisica di Lui, Aristotele, riuscirebbe dunque ad uscirne indenne.    Ghigno

Diciamo che venticinque secoli di filosofia non sono passati invano. Anche se la filosofia (e men che mai le altre scienze) non ha trovato risposte univoche o complete a domandine tipo "Tutta la realtà è materiale o no? L’uomo è immortale o no? Esiste il libero arbitrio? Che cosa possiamo conoscere con certezza? Esistono verità innegabili?(1) Cos’è la verità? Che cos’è il bene? Cosa è il tempo? Che cos'è la volontà? Cosa vuol dire che una cosa ne causa un’altra? Cosa vuol dire esistere?", almeno le dispute tra analitici e continentali sono servite a delimitare meglio il campo da gioco, i problemi da risolvere e i non-problemi, e ad inquadrare i rami più formali della filosofia stessa, quelli nei quali si può procedere appunto in modo "analitico"... non mi sembra poco, anche per chi pensa che gli unici filosofi esistiti siano stati Platone e Kant.



(1) La risposta ovvia è che le Verità innegabili sono quelle della Logica formale e, per conseguenza, quelle dei sistemi assiomatici sui quali si fonda la Matematica. Tuttavia, questo non risolve affatto il problema filosofico: da un lato esistono alcuni sistemi assiomatici "fallati" poiché soggetti ai teoremi limitativi di Gödel, nei quali ad esempio alcune asserzioni, seppur vere, non sono dimostrabili; dall'altro i filosofi non si accontentano di Verità relative ad enti astratti ed apparentemente arbitrari, ed entrano sia nel merito della stessa ontologia degli oggetti logici e matematici, sia e soprattutto nella ricerca di verità ultimative al di fuori del magico reame dei sistemi formali. Ci sarebbero poi anche delle posizioni deliranti contemplate piuttosto forzosamente nell'ambito della stessa filosofia della matematica, vedasi Reuben Hersh e altro costruttivismo di risulta, che tuttavia sono assolutamente minoritarie e non sono realmente degne di considerazione, poiché non spiegano affatto come l'apparente arbitrarietà di definizioni e assiomi conduce ad una elevatissima e sorprendente coerenza di fondo che emerge in modo del tutto inaspettato e transdisciplinare, dando luogo ad esempio a quello che per decenni è stato denominato "calcolo umbrale" a cause delle inattese proprietà comuni mostrate da oggetti matematici definiti in tempi, modi, ambiti e per scopi del tutto diversi ed eterogenei.
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.

Un blog? Io? Occhiolino
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines