Qual é a diferença entre atribuição, avaliação e vinculação de nome?


Respostas:


6

A ligação tem a ver com dar nomes a coisas (ou valores) em um determinado contexto bem delimitado. A tarefa é armazenar coisas (ou valores) em algum local (uma variável). Outra atribuição pode substituir um valor anterior por um novo. A avaliação consiste em vincular todos os identificadores de um texto formal a algo (com um valor). Em matemática, esses identificadores são freqüentemente chamados de variáveis, o que causa confusão com o conceito de variável (ou seja, armazenamento de memória) na ciência da computação.

Tentando fornecer detalhes mais intuitivos

A associação de nome atribui um significado aos identificadores em alguma parte (chamada escopo) do texto matemático ou de programação em questão. Esse significado pode realmente ser visto como um valor em algum domínio quando o texto é interpretado.

Por exemplo, se você declarar foocomo uma variável inteira, o valor anexado ao fooescopo é uma variável inteira. Uma variável inteira pode ser vista informalmente como um contêiner que pode transportar um valor inteiro, que pode ser alterado. Você também pode vê-lo como o endereço de um local na memória onde o conteúdo pode ser armazenado.

Mas se você declarar foocomo o número inteiro 25, no escopo, qualquer uso de fooé idêntico ao uso de 25. Se você declarar foo como uma constante inteira, ele não poderá ser alterado e, portanto, seu valor deverá ser especificado.

A ligação está anexando um nome a algum valor que não muda no escopo do nome. Um exemplo é um documento legal declarando que " for the purpose of this document, Mr. Brown, and the Smith family shall be called the beneficiary." o escopo é o documento jurídico. E em todo o documento, o uso da palavra beneficiarysignifica o Sr. Brown e a família Smith. Você pode vê-lo como uma definição de terminologia local. Tem a ver com dar nomes às coisas. Vincular é falar, ler ou escrever. Não se trata de executar ou mover valores: isso corresponde à atribuição.

Uma variável pode ser vista como um pedaço de memória que pode conter um valor. Quando você tem uma variável, pode alterar o valor contido nessa variável com uma atribuição. Se fooestiver vinculado a (ou denotar) uma variável no escopo atual, você poderá atribuir um valor a foo, ou seja, à variável indicada por foo, ou ler o valor contido nessa variável. E você pode alterar esse valor com uma nova atribuição.

Portanto, a ligação é uma operação que diz qual é o significado dos nomes no texto do programa ou do discurso matemático. É estático, no sentido de que o texto não muda. Mas atribuição é um conceito de programação que consiste em armazenar um valor em uma variável, ou seja, em um contêiner, que geralmente é um local na memória. É um conceito dinâmico relacionado a como (representações) dos valores são armazenados na memória, que muda à medida que o programa avança.

Observe que uma variável pode existir independentemente de qualquer nome ao qual possa estar vinculada. É o caso de um elemento de uma matriz, para dar um exemplo simples.

Em vários contextos, pode-se considerar expressões ou textos que usam nomes que não foram definidos. Por exemplo, você pode escrever que é uma expressão aritmética. Depois, você pode avaliar as variáveis, associando um ambiente (você pode ler aproximadamente um escopo) onde as variáveis e são obrigados a alguns valores, por exemplo, 3 e 12, e estar interessado no valor assumido pelo exression. Uma avaliação é uma associação de um conjunto de nomes, cada um com um valor específico. A avaliação do nome é usada mais em matemática formal, enquanto atribuição é um conceito de programação.(a2b2)/(ab)ab


Para resumir, você basicamente confirma que todas as operações atribuem um valor à variável / identificador / espaço reservado. A diferença é o contexto. Quando mapeamos convidado (programa) para host (máquina), dizemos binding. Quando a variável é vinculada a algum valor durante a execução do programa, dizemos it was assignede preferimos dizer valuatedno contexto formal / cs. Eu apenas comecei a olhar para as variáveis ​​free / bound hoje e confuso. É como o contexto formal / cs, mas o jargão do compilador / engenheiro de computador é usado?
Val

2
@RecognizeEvilasWaste Eu tentei esclarecer. Mas há uma dificuldade devido ao fato de que a terminologia matemática entra em conflito com a terminologia da ciência da computação. Uma variável não pode ser vinculada a algum valor, uma variável recebe um valor. Um identificador está vinculado a um significado, mas a noção formal de significado é de algum valor em um domínio semântico. Você não atribui identificadores, não vincula variáveis. Identificadores são sintaxe, fala. Variáveis ​​são memória, usada para armazenar informações. Na verdade, é o jargão do computador que foi derivado do discurso formal.
babou

2
Sua confusão é compreensível. No cálculo lambda, a palavra variável é usada para o que chamo de identificador. De um modo mais geral, existe todo um ramo da programação, chamado programação funcional, que não deve usar atribuição. Portanto, em princípio, tudo é feito por meio de vinculação, mas fornece um estilo de programação muito diferente. O cálculo lambda é o exemplo formal básico disso. No entanto, eles ainda falam de variáveis ​​para o que são identificadores. Sua pergunta é justa e a terminologia é confusa. Bem, eu fiz o meu melhor.
babou

@RecognizeEvilasWaste Sua pergunta é realmente muito boa. Eu não tinha percebido quanta ambiguidade isso cria para iniciantes.
21715

Não apenas para iniciantes. Eu diria que tenho muita experiência nessas questões. Eu posso entender o que eles significam. Mas sempre tenho dificuldade em qual termo usar quando quero dizer coisas semelhantes. Também gosto de ver as relações entre as coisas, en.wikipedia.org/wiki/User:Javalenok Isso ajuda a entender.
Val
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.