Что делает «: =»?


111

Я видел :=использование в нескольких примерах кода, но ни разу с сопровождающим объяснением. Невозможно использовать его в Google, не зная его имени.

Что оно делает?


11
На каком языке?
Beta,

4
Обычно вы используете, :=когда что-то определяете, чтобы отделить это от обычных изменений переменных. О каком языке программирования мы говорим?
svens

3
PL / SQL предназначен для присвоения. Но, учитывая другой язык, этот ответ не гарантированно верен - так на каких языках был приведен пример?
Эндрю

12
Чтобы погуглить что-то подобное, укажите это по буквам и заключите в кавычки, например: «двоеточие равно»
Интелекшуал

3
Я думаю, что у Паскаля есть этот оператор!

Ответы:


104

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

В языках компьютерного программирования знак равенства обычно обозначает либо логический оператор для проверки равенства значений (например, как в Pascal или Eiffel), что согласуется с использованием символа в математике, либо оператор присваивания (например, как в C-подобных языках) ). В языках, сделавших первый выбор, часто используется знак равенства с двоеточием (: =) или ≔ для обозначения оператора присваивания. Языки, делающие последний выбор, часто используют двойной знак равенства (==) для обозначения своего логического оператора равенства.

Примечание: я нашел это, выполнив поискcolon equals operator


58
По иронии судьбы, этот ответ теперь находится над Википедией при поиске colon equals operator.
nighthawk454,

6
Если мы продолжаем печатать colon equals operator, мы волшебным образом работаем над SEO Google, чтобы сделать это лучшим результатом
ATLUS

47

Это оператор присваивания в Паскале, который часто используется в доказательствах и псевдокоде. Это то же самое, что и =в языках Си.

Исторически документы по информатике использовались =для сравнения на равенство и для заданий. Раньше Паскаль :=заменял стрелку влево, которую трудно набрать. C пошел в другую сторону , и вместо этого решили на =и ==операторов.


25

В статически типизированном языке Go := - это инициализация и назначение за один шаг. Это сделано для того, чтобы на компилируемом языке можно было создавать переменные, аналогичные интерпретируемым.

// Creates and assigns
answer := 42

// Creates and assigns
var answer = 42


4

Другая интерпретация из-за пределов мира языков программирования исходит от Wolfram Mathworld и др.:

Если A и B равны по определению (т. Е. A определяется как B), то это обозначается символически как A = B, A: = B или иногда A≜B.

http://mathworld.wolfram.com/Defined.html

/math/182101/appistent-notation-equiv-versus


0

Это старый (паскальский) синтаксис оператора присваивания. Это будет использоваться так:

a := 45;

Это может быть и на других языках, вероятно, в аналогичном использовании.


0

Во многих книгах по CS он используется как оператор присваивания, чтобы отличать его от оператора равенства =. Однако во многих языках высокого уровня присваивание есть, =а равенство есть ==.


0

Это как стрелка без символа «меньше» <=, так как все уже сказали оператор «присваивания». Внесение ясности в то, что и где установлено, в отличие от логического оператора эквивалентности.

В математике это похоже на равенство, но A: = B означает, что A определяется как B, тройная черта равенства может использоваться, чтобы сказать, что это похоже и равно по определению, но не всегда одно и то же.

В любом случае, я указываю на эти другие ссылки, которые, вероятно, были в умах тех, кто его изобрел, но на самом деле это просто тот уровень, равный и меньший, чем равные, были взяты (или потенциально легко перепутаны с = <), и было необходимо что-то новое для определения назначения и это имело смысл.

Исторические ссылки: я впервые увидел это в SmallTalk, оригинальном объектном языке, из которого SJ из Apple скопировал только часть Windows, а BG Microsoft разбавил их дальше (однопоточный). В конце концов, SJ из NeXT усвоил второй более важный урок от Xerox PARC, который стал Objective C.

Во всяком случае, они просто взяли оператор заданий с двоеточием из АЛГОЛА 1958, который позже был популяризирован Паскалем.

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

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

Присваивания обычно позволяют переменной хранить разные значения в разное время в течение ее жизненного цикла и области действия. Однако некоторые языки (в основном строго функциональные) не допускают такого «деструктивного» переназначения, поскольку это может означать изменения нелокального состояния. Цель состоит в том, чтобы обеспечить ссылочную прозрачность, то есть функции, которые не зависят от состояния некоторой переменной (переменных), но дают одинаковые результаты для заданного набора параметрических входных данных в любой момент времени.

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


0

Для VB.net,

конструктор (в данном случае Me = this в Java):

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

когда вы создаете этот объект:

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

Тогда, независимо от порядка параметров, этот объект ABC имеет A = 2, B = 3, C = 1

Итак, да, очень хорошая практика для других, чтобы эффективно читать ваш код


-1

Знак равенства двоеточия использовался в Алголе и его потомках, таких как Паскаль и Ада, потому что он настолько близок, насколько ASCII подходит к символу стрелки влево.

Странное соглашение об использовании равенства для присваивания и двойного равенства для сравнения началось с языка C.

В Прологе нет различия между присваиванием и проверкой равенства.


Если бы они хотели, чтобы это было близко к левой стрелке, они могли бы использовать, <-как это сделал Haskell. Они не пытались приблизиться к левой стрелкой с :=, они использовали математические «определяются как» оператор: mathworld.wolfram.com/Defined.html
Variadicism

1
Предупреждение педанта: <- в Haskell это не назначение. В Haskell нет деструктивного присваивания, как в Паскале, Аде и т. Д. <- это часть синтаксиса do-notation для подстановки параметров. Это больше похоже на процесс подстановки значений в параметры при вызове подпрограммы.
Майкл восстановит Монику Челлио

1
@Michael Достаточно справедливо. Ты прав. Виноват. В любом случае, суть в том, что если бы они пытались имитировать стрелку влево, они бы не использовали :=, они бы использовали <-.
Вариадизм
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.