Perché ci sono entrambi gli operatori logici e! =?

4

Sono due operatori '< >' e '! =' usato nei linguaggi di programmazione con lo stesso significato generale.

'< >' può essere utilizzato in PHP, SQL e Pascal.

'! =' sembra essere più comunemente usato.

Qual è la ragione originale per cui entrambi questi operatori coesistono, quando sembrano essere così simili nello scopo? Qual è stata la prima lingua a supportare entrambi?

    
posta Liam 15.09.2017 - 17:25
fonte

3 risposte

10

L'operatore != è più comunemente usato al giorno d'oggi a causa della travolgente influenza in C. Ma come è arrivato C?

L'operatore matematico per la disuguaglianza è . Alcune lingue usano questo operatore direttamente come parte della loro sintassi, ad es. APL o ALGOL. Poiché la negazione matematica è ¬ , il dialetto ALGOL W utilizza ¬= . Il fatto che tali simboli siano supportati dipende dal set di caratteri e dalla tastiera del sistema informatico. Poiché molte lingue sono state definite in una notazione più matematica che non corrispondeva esattamente alla rappresentazione reale del codice sorgente, questo pezzettino di archeologia informatica è un po 'difficile.

Per scrivere programmi su sistemi senza questi simboli sono stati usati altri grafici. Si noti che ASCII a 7 bit non era in alcun modo universale per un lungo periodo di tempo, quindi il set di caratteri ASCII non era di per sé un vincolo o un serbatoio di possibili caratteri per i progettisti di linguaggi.

Negazione supportata ALGOL come /= che è visivamente molto vicino all'operatore matematico. (Per inciso, il carattere backslash \ è stato implementato in modo che ALGOL potesse scrivere operatori logici come /\ e \/ .) Molte lingue supportano le parole chiave che potrebbero essere utilizzate al posto degli operatori, come .NE. (Fortran ), .NE (ALGOL a 6 bit) o NE o NEQ .

Gli antenati di C sono B e BCPL. Questi sono linguaggi senza nome: tutto è una parola macchina. Non distinguono tra operazioni logiche e bit a bit. Nella negazione bit a bit BCPL era ~ e il puntatore-dereferenza era !foo . Non c'era un simbolo simile ad ASCII per i non-uguali. In B, il pointer-dereference era diventato *foo e la negazione e non-equals erano ! e != rispettivamente. Questa convenzione fu in seguito conservata in C. Non sono sicuro del motivo per cui B lo cambiò, ma B era piuttosto a corto di esperienza e soggetto a molta sperimentazione sintattica prima che C si sviluppasse fuori da esso (all'incirca nel 1971-1973).

Da allora C si è rivelato incredibilmente popolare ed è una grande influenza su altre lingue. La maggior parte delle lingue più recenti non vede alcun motivo per utilizzare operatori inattesi e prende in prestito != da C.

Sembra che <> sia stato usato principalmente da Pascal, SQL e BASIC poiché indica "minore o maggiore di", cioè "non uguale". Tuttavia, non riesco a trovare riferimenti validi. I report per Pascal 73 e SEQUEL 74 sembrano solo menzionare . Lo standard Pascal ISO 7185: 1990 utilizza <> ma, naturalmente, non spiega alcuna storia. Non so cosa sia stato usato nella versione del 1983 dello standard.

I documenti interessanti letti durante la ricerca di questa risposta, ordinati cronologicamente:

risposta data 15.09.2017 - 20:24
fonte
2

Le diverse rappresentazioni dell'operatore di disuguaglianza sono in gran parte il risultato di ragioni storiche. Le primissime lingue sono state sviluppate in relativo isolamento rispetto a ciò che vediamo oggi e sono state scelte per ragioni molto deboli, spesso la preferenza personale dell'architetto / designer della lingua. C'era molta più variazione nella rappresentazione nei primi linguaggi di programmazione rispetto a due.

Poiché i linguaggi di programmazione si sviluppano all'interno di famiglie, ad esempio Java, C # e C ++, condividono una sintassi simile a C che proviene da B. La popolarità di ogni stile di operatore di disuguaglianza è in gran parte il risultato della popolarità dell'intera lingua , piuttosto che qualsiasi caratteristica specifica.

link

    
risposta data 15.09.2017 - 19:00
fonte
0

Per quanto ne so, molti linguaggi hanno basato la scelta dell'operatore di disuguaglianza sullo sfondo dei creatori, quelli con uno sfondo prevalentemente matematico tendevano a usare <> o approssimavano il simbolo ≠ con /= mentre quelli con una logica, sfondo elettronico o semantico tendente verso! =, se ricordo bene c'era anche uno che aveva == ma nessun operatore di disuguaglianza per un po 'dovevi usare NOT(a == b) .

La prima lingua con cui personalmente conosco bene consente entrambi <> e != è Python che consente l'utilizzo sia di <> sia di != e ha anche gli operatori di identità is e is not

    
risposta data 15.09.2017 - 20:04
fonte

Leggi altre domande sui tag