È corretto chiamare il simbolo di assegnazione un "operatore" quando in realtà è una dichiarazione?

0

In alcune lingue (C ++, Java, Ruby, ecc.) un'assegnazione restituisce un valore e può essere utilizzato in un'espressione:

x = (y = z);    // ok, 'x' gets the value of 'z'

In altre lingue (Ada, VHDL), un'assegnazione è un'istruzione corretta e non può essere utilizzata come espressione:

x := (y := z);   -- error!

Tuttavia, in entrambi i casi, è possibile trovare materiale didattico in cui il simbolo dell'assegnazione è chiamato "operatore di assegnazione".

La mia domanda è, è tecnicamente corretto chiamare il simbolo di assegnazione un "operatore" nel secondo caso, dove in realtà è un'istruzione, non restituisce un valore e non può essere usato nel mezzo di un'espressione?

    
posta rick 13.05.2014 - 19:13
fonte

1 risposta

4

L'assegnazione istruzione è composta da tre parti:

  • Il target o lvalue.
  • Il compito operatore .
  • Il valore da assegnare o rvalore.

Il valore rvalue può essere una costante o un'espressione che restituisce un valore del tipo corretto (o non necessariamente corretto, in alcune lingue). Il requisito è che il valore da assegnare a se stesso costituisca un valore valido sotto le regole della lingua specifica.

Come si fa notare, alcune lingue rendono un istruzione di assegnazione restituire il valore assegnato. C, C ++, C #, Java e un sacco di altri lo fanno in questo modo, alcuni con restrizioni. Questa è una pratica potenzialmente pericolosa, ma è un'incredibile notazione abbreviata nelle mani di coloro che sanno come usarla. Come sappiamo, ciò significa che le persone lo abuseranno deliberatamente o perché non comprendono i dettagli più fini della sintassi coinvolta. Il modo tecnico per esprimere questo è che la dichiarazione di assegnazione è un valore.

Quindi alcuni altri linguaggi rendono le istruzioni di assegnazione valide solo come dichiarazioni autonome e stabiliscono che l'operatore di assegnazione è valido solo all'interno di un'istruzione di assegnazione valida. In altre parole, in queste lingue una dichiarazione di assegnazione completa non è un valore valido.

Entrambi sono metodi validi per progettare una lingua, in base ai propri obiettivi. Ricorda sempre che C è stato progettato per essere in grado di fare praticamente tutto ciò che il linguaggio assembly può fare, solo in modo portatile e preferibilmente più leggibile, e molti linguaggi C-like derivano molte funzioni direttamente da C, anche se la sintassi è leggermente diversa . Ada d'altra parte è stata progettata per rendere estremamente difficile scrivere programmi che fanno qualsiasi cosa tranne esattamente ciò che è previsto.

Ne consegue dal ragionamento precedente che = in C, C ++, C #, Java, ...; := in Pascal, Ada, ...; e così via, può essere correttamente chiamato l'incarico operator , che forma una parte di una completa dichiarazione di assegnazione. Se una dichiarazione di assegnazione completa si forma un valore valido è un argomento diverso e in realtà non ha nulla a che fare con lo stato della sequenza di caratteri in quanto tale che viene utilizzato per indicare l'assegnazione a un lvalue.

    
risposta data 13.05.2014 - 19:38
fonte

Leggi altre domande sui tag