Что означает оператор: = означает? [Дубликат]

Or/And всегда всегда оценивает как 1 выражения, а затем возвращает результат. Короткое замыкание не .

OrElse/AndAlso - короткое замыкание . Правильное выражение оценивается только в том случае, если результат не может быть определен из оценки только левого выражения. (Это означает, что OrElse будет оценивать только правильное выражение, если левое выражение ложно, а AndAlso будет оценивать только правильное выражение, если левое выражение истинно.)

Предполагая, что в выражениях нет побочных эффектов , а выражения не зависят (и любые служебные данные исполнения игнорируются), то они одинаковы.

Однако во многих случаем является то, что выражения зависят . Например, мы хотим что-то сделать, когда List is not-Nothing и имеет более одного элемента:

If list IsNot Nothing AndAlso list.Length > 0 Then .. 'list has stuff

Это также можно использовать, чтобы избежать «дорогого» вычисления (или побочных эффектов, ick!):

If Not Validate(x) OrElse Not ExpensiveValidate(x) Then .. 'not valid

Лично я считаю, что AndAlso и OrElse являются правильными операторами для использования во всех, кроме 1% - или меньше, надеюсь ! - случаев, когда желателен побочный эффект .

Счастливое кодирование.


1 Исключение, созданное в первом выражении, предотвратит второе выражение от оценки, но это вряд ли удивительно.

92
задан Péter Török 17 March 2011 в 21:27
поделиться

9 ответов

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

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

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

89
ответ дан drudge 20 August 2018 в 14:48
поделиться
  • 1
    Как ни странно, этот ответ теперь находится над Википедией при поиске colon equals operator. – nighthawk454 19 February 2015 в 19:59
  • 2
    Если мы продолжаем печатать colon equals operator, мы используем магию для SEO Google, чтобы сделать это лучшим результатом – ATLUS 4 February 2016 в 08:23

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

0
ответ дан gailbear 20 August 2018 в 14:48
поделиться

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

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

41
ответ дан John Kugelman 20 August 2018 в 14:48
поделиться

Это как стрелка, не использующая меньше, чем символ & lt; = так, как и все уже упомянутые операторы присваивания. Приведение ясности к тому, что задается для того, где в отличие от логического оператора эквивалентности.

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

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

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

Хорошо, в любом случае, они просто взяли оператор assill для равных равных из ALGOL 1958, который позже был популяризирован Pascal

https://en.wikipedia.org/wiki/PARC_ (компания)

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

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

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

0
ответ дан Master James 20 August 2018 в 14:48
поделиться

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

// Creates and assigns
answer := 42

// Creates and assigns
var answer = 42
21
ответ дан Matias Forbord 20 August 2018 в 14:48
поделиться

В Algol и его потомках, таких как Pascal и Ada, были использованы эквиваленты Colon, так как он приближается к символу слева. A / -эквиваленты для сравнения были начаты с языка С.

В Prolog нет различия между назначением и тестом равенства.

-1
ответ дан Michael 20 August 2018 в 14:48
поделиться
  • 1
    Код ASCII 60 для < – Null Head 14 April 2016 в 23:21
  • 2
    Если бы они хотели, чтобы это было близко к левой стрелке, они могли бы использовать <-, как это делал Haskell. Они не пытались приблизиться к левой стрелке с помощью :=, они использовали математический оператор «определяется как»: mathworld.wolfram.com/Defined.html – Variadicism 17 April 2016 в 08:46
  • 3
    Предупреждение педанта: & lt; - в Haskell не является назначением. Haskell не имеет деструктивного назначения на пути Pascal, Ada и т. Д. & Lt; - является частью синтаксиса do-notation для замещения параметров. Это более похоже на процесс подстановки значений в параметры в вызове подпрограммы. – Michael 20 April 2016 в 10:41
  • 4
    @Michael Достаточно честный. Ты прав. Виноват. Во всяком случае, остается то, что если бы они пытались подражать левой стрелке, они бы не использовали :=, они бы использовали <-. – Variadicism 16 August 2016 в 19:52

Некоторые языки используют := в качестве оператора присваивания.

4
ответ дан Mike Lewis 20 August 2018 в 14:48
поделиться

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

a := 45;

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

0
ответ дан mklauber 20 August 2018 в 14:48
поделиться

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

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

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

https://math.stackexchange.com/questions/182101/appro-notation-equiv-versus

4
ответ дан RBV 20 August 2018 в 14:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: