Co robi „: =”?

111

Widziałem :=używane w kilku przykładach kodu, ale nigdy z towarzyszącym wyjaśnieniem. Nie jest możliwe wygooglowanie jego użycia bez znajomości właściwej nazwy.

Co to robi?

Cyklon
źródło
11
W jakim języku?
Beta
4
Zwykle używasz, :=kiedy coś definiujesz, aby oddzielić to od regularnych zmian zmiennych. O jakim języku programowania mówimy?
svens
3
PL / SQL służy do przypisania. Ale biorąc pod uwagę inny język, ta odpowiedź nie jest prawdziwa - więc w jakich językach był przykład?
Andrew
12
Aby wygooglować coś takiego, przeliteruj to i umieść w cudzysłowie, na przykład: „dwukropek równa się”
Intelekshual
3
Myślę, że Pascal ma tego operatora!

Odpowiedzi:

104

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

W językach programowania komputerowego znak równości zazwyczaj oznacza operator boolowski do testowania równości wartości (np. Jak w Pascalu lub Eiffel), co jest zgodne z użyciem tego symbolu w matematyce, lub operator przypisania (np. Jak w językach C-podobnych ). Języki dokonujące pierwszego wyboru często używają dwukropka równa się (: =) lub ≔ do oznaczenia operatora przypisania. Języki dokonujące tego drugiego wyboru często używają podwójnego znaku równości (==) do oznaczenia logicznego operatora równości.

Uwaga: znalazłem to, wyszukująccolon equals operator

popychadło
źródło
58
Jak na ironię, ta odpowiedź jest teraz powyżej Wikipedii podczas wyszukiwania colon equals operator.
nighthawk454
6
Jeśli będziemy dalej pisać colon equals operator, działamy magicznie na SEO Google, aby uzyskać najlepszy wynik
ATLUS
47

Jest to operator przypisania w Pascalu i jest często używany w dowodach i pseudokodach. To to samo, co =w językach C-dialektów.

Historycznie rzecz biorąc, artykuły informatyczne używane =do porównań równości i zadań. Pascal :=zastępował trudną do wpisania strzałkę w lewo. C poszedł w innym kierunku i zamiast tego zdecydował się na operatory =i ==.

John Kugelman
źródło
25

W języku typowanym statycznie Go := jest inicjalizacją i przypisywaniem w jednym kroku. Ma to na celu umożliwienie tworzenia zmiennych w sposób podobny do interpretacji w języku kompilowanym.

// Creates and assigns
answer := 42

// Creates and assigns
var answer = 42
Matias Forbord
źródło
5

Niektóre języki :=działają jako operator przypisania.

Mike Lewis
źródło
@Pacerier zobacz ten post stackoverflow.com/questions/7462322/, aby dowiedzieć się, dlaczego odpowiedź na Twoje pytanie może brzmieć zarówno „Tak”, jak i „Nie”.
TigOldBitties
@TigOldBitties, Dobra wiadomość od Erwina.
Pacerier,
0

To jest stara (pascalowa) składnia operatora przypisania. Byłoby to używane w następujący sposób:

a := 45;

Może być również w innych językach, prawdopodobnie w podobnym użyciu.

mklauber
źródło
0

W wielu książkach CS jest używany jako operator przypisania, aby odróżnić go od operatora równości =. Jednak w wielu językach wysokiego poziomu przypisanie jest =i równość ==.

gailbear
źródło
0

Jest jak strzałka bez użycia symbolu mniejszego niż <=, tak jak wszyscy już powiedzieli operator „przypisania”. Zapewnienie jasności co do tego, co jest ustawiane, w przeciwieństwie do logicznego operatora równoważności.

W matematyce jest jak równa się, ale A: = B oznacza, że ​​A jest zdefiniowane jako B, potrójna kreska równa się może być użyta, aby powiedzieć, że jest podobny i równy z definicji, ale nie zawsze to samo.

W każdym razie wskazuję na te inne odniesienia, które prawdopodobnie były w umysłach tych, którzy go wymyślili, ale tak naprawdę jest po prostu to, że płaszczyzna równa się, a mniej, że równa się została wzięta (lub potencjalnie łatwo pomylona z = <) i potrzebne było coś nowego do zdefiniowania przypisania i to miało największy sens.

Odniesienia historyczne: Po raz pierwszy zobaczyłem to w SmallTalk, oryginalnym języku obiektowym, z którego SJ firmy Apple skopiował tylko część systemu Windows, a BG firmy Microsoft jeszcze bardziej je rozwodnił (jednowątkowy). Ostatecznie SJ w NeXT wziął drugą ważniejszą lekcję od Xerox PARC w, która stała się celem C.

No cóż, po prostu wzięli operator asymilacji równości okrężnicy z ALGOL 1958, który został później spopularyzowany przez Pascala

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

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

Przypisania zazwyczaj pozwalają zmiennej na przechowywanie różnych wartości w różnym czasie w trakcie jej trwania i zakresu. Jednak niektóre języki (głównie ściśle funkcjonalne) nie pozwalają na tego rodzaju „destrukcyjne” przypisanie, ponieważ mogłoby to oznaczać zmiany stanu nielokalnego. Celem jest wymuszenie przezroczystości referencyjnej, tj. Funkcji, które nie zależą od stanu jakiejś zmiennej (-ych), ale dają takie same wyniki dla danego zestawu parametrów wejściowych w dowolnym momencie.

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

Mistrz James
źródło
0

W przypadku VB.net

konstruktor (w tym przypadku Me = this w Javie):

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

kiedy tworzysz ten obiekt:

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

Wtedy, niezależnie od kolejności parametrów, ten obiekt ABC ma A = 2, B = 3, C = 1

Tak więc, bardzo dobra praktyka dla innych, aby efektywnie czytać Twój kod

Blisko
źródło
-1

Colon-equals był używany w Algolu i jego potomkach, takich jak Pascal i Ada, ponieważ jest tak blisko, jak ASCII zbliża się do symbolu strzałki w lewo.

Dziwna konwencja używania równych sobie do przypisania i podwójnie równych do porównań została zapoczątkowana w języku C.

W Prologu nie ma różnicy między przypisaniem a testem równości.

Michael przywraca Monikę Cellio
źródło
Gdyby chcieli, żeby znajdowała się blisko lewej strzałki, mogliby użyć <-tak, jak zrobił to Haskell. Nie próbowali zbliżyć się do lewej strzałki :=, używali matematycznego „jest zdefiniowany jako„ operator: mathworld.wolfram.com/Defined.html
Variadicism ”
1
Alert pedanta: <- w Haskell nie jest przypisanie. Haskell nie ma destrukcyjnego przypisania w stylu Pascala, Ada itp. <- jest częścią składni do notacji do podstawiania parametrów. Jest to bardziej analogiczne do procesu zastępowania wartości parametrami w wywołaniu podprogramu.
Michael przywraca Monikę Cellio
1
@Michael Fair wystarczająco. Masz rację. Mój błąd. W każdym razie chodzi o to, że gdyby próbowali naśladować lewą strzałkę, to by nie użyli :=, to by użyli <-.
Variadicism