O que “: =” faz?


111

Já vi :=usado em vários exemplos de código, mas nunca com uma explicação de acompanhamento. Não é exatamente possível pesquisar seu uso no Google sem saber o nome adequado para ele.

O que isso faz?


11
Em que língua?
Beta de

4
Você normalmente usa :=quando define algo, para separá-lo das alterações de variáveis ​​regulares. De que linguagem de programação estamos falando?
svens,

3
PL / SQL é para atribuição. Mas, em um idioma diferente, essa resposta não é garantida como verdadeira - então, em quais idiomas estava o exemplo?
Andrew,

12
Para pesquisar algo assim no Google,
soletre

3
Acho que Pascal tem essa operadora!

Respostas:


104

http://en.wikipedia.org/wiki/Equals_sign#In_computer_programming

Em linguagens de programação de computador, o sinal de igual geralmente denota um operador booleano para testar a igualdade de valores (por exemplo, como em Pascal ou Eiffel), que é consistente com o uso do símbolo em matemática, ou um operador de atribuição (por exemplo, como em linguagens semelhantes a C ) Os idiomas que fazem a primeira escolha geralmente usam dois-pontos iguais (: =) ou ≔ para denotar seu operador de atribuição. Os idiomas que fazem a última escolha geralmente usam um sinal de igual duplo (==) para denotar seu operador de igualdade booleano.

Nota: eu encontrei isso pesquisando porcolon equals operator


58
Ironicamente, esta resposta agora está acima da Wikipedia na pesquisa colon equals operator.
nighthawk454

6
Se continuarmos digitando colon equals operator, faremos mágica no SEO do Google para tornar este o melhor resultado
ATLUS

47

É o operador de atribuição em Pascal e é freqüentemente usado em provas e pseudo-código. É a mesma coisa que =nas linguagens de dialeto C.

Historicamente, os papéis da ciência da computação são usados =para comparações de igualdade e para atribuições. Pascal costumava substituir :=a seta para a esquerda difícil de digitar. C foi em uma direção diferente e, em vez disso, decidiu pelos operadores =e ==.


25

Na linguagem digitada estaticamente, Go := é a inicialização e a atribuição em uma única etapa. Isso é feito para permitir a criação de variáveis ​​do tipo interpretado em uma linguagem compilada.

// Creates and assigns
answer := 42

// Creates and assigns
var answer = 42



0

Esta é a sintaxe antiga (pascal) para o operador de atribuição. Seria usado assim:

a := 45;

Pode ser em outros idiomas também, provavelmente em um uso semelhante.


0

Em muitos livros de CS, ele é usado como o operador de atribuição, para diferenciar do operador de igualdade =. Em muitas linguagens de alto nível, porém, atribuição é =e igualdade é ==.


0

É como uma seta sem usar o símbolo menor que <= então como todo mundo já disse operador de "atribuição". Trazendo clareza para o que está sendo definido onde, em oposição ao operador lógico de equivalência.

Em matemática é como igual, mas A: = B significa que A é definido como B, uma barra tripla igual pode ser usada para dizer que é semelhante e igual por definição, mas nem sempre a mesma coisa.

De qualquer forma, aponto para essas outras referências que provavelmente estavam nas mentes daqueles que o inventaram, mas na verdade é apenas aquele plano igual e menos que igual foi tomado (ou potencialmente facilmente confundido com = <) e algo novo para definir a atribuição era necessário e isso fazia mais sentido.

Referências históricas: Eu vi isso pela primeira vez em SmallTalk, a linguagem de objeto original, da qual SJ da Apple apenas copiou a parte do Windows e BG da Microsoft diluiu ainda mais (single threaded). Eventualmente, SJ na NeXT tirou a segunda lição mais importante do Xerox PARC em, que se tornou o Objectivo C.

Bem, de qualquer maneira, eles apenas pegaram o operador de avaliação de dois pontos iguais do ALGOL 1958, que mais tarde foi popularizado por Pascal

https://en.wikipedia.org/wiki/PARC_(company)

https://en.wikipedia.org/wiki/Assignment_(computer_science)

As atribuições normalmente permitem que uma variável mantenha valores diferentes em momentos diferentes durante sua vida útil e escopo. No entanto, algumas linguagens (principalmente estritamente funcionais) não permitem esse tipo de reatribuição "destrutiva", pois isso pode implicar em mudanças de estado não local. O objetivo é reforçar a transparência referencial, isto é, funções que não dependem do estado de algumas variáveis, mas produzem os mesmos resultados para um determinado conjunto de entradas paramétricas em qualquer ponto no tempo.

https://en.wikipedia.org/wiki/Referential_transparency


0

Para VB.net,

um construtor (neste caso, Me = this em Java):

Public ABC(int A, int B, int C){
Me.A = A;
Me.B = B;
Me.C = C;
}

quando você cria esse objeto:

new ABC(C:=1, A:=2, B:=3)

Então, independentemente da ordem dos parâmetros, esse objeto ABC tem A = 2, B = 3, C = 1

Então, sim, prática muito boa para que outros leiam seu código de forma eficaz


-1

Dois pontos iguais foram usados ​​em Algol e seus descendentes, como Pascal e Ada, porque é o mais próximo que o ASCII chega de um símbolo de seta para a esquerda.

A estranha convenção de usar igual para atribuição e duplo igual para comparação foi iniciada com a linguagem C.

No Prolog, não há distinção entre atribuição e teste de igualdade.


Se quisessem perto da seta para a esquerda, poderiam ter usado <-como Haskell fez. Eles não estavam tentando se aproximar da seta para a esquerda com :=, eles estavam usando o operador matemático 'é definido como': mathworld.wolfram.com/Defined.html
Variadicismo

1
Alerta pedante: <- em Haskell não é atribuição. Haskell não tem atribuição destrutiva na forma de Pascal, Ada etc. <- faz parte da sintaxe de notação para substituição de parâmetro. É mais análogo ao processo de substituição de valores em parâmetros em uma chamada de sub-rotina.
Michael restaurou Monica Cellio de

1
@Michael Bastante justo. Você está certo. Foi mal. De qualquer forma, permanece o fato de que se eles estivessem tentando imitar a seta para a esquerda, eles não teriam usado :=, eles teriam usado <-.
Variadicismo de
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.