Gần đây tôi đã chơi với ngôn ngữ lập trình mới của google Go
và tự hỏi tại sao toán tử gán lại :=
có dấu hai chấm trước dấu bằng =
Có lý do cụ thể nào khiến các tác giả của ngôn ngữ này muốn sử dụng name := "John"
thay vìname = "John"
Gần đây tôi đã chơi với ngôn ngữ lập trình mới của google Go
và tự hỏi tại sao toán tử gán lại :=
có dấu hai chấm trước dấu bằng =
Có lý do cụ thể nào khiến các tác giả của ngôn ngữ này muốn sử dụng name := "John"
thay vìname = "John"
Câu trả lời:
Các :=
ký hiệu phục vụ cả hai như là một lời tuyên bố và như khởi tạo.
foo := "bar"
tương đương với
var foo = "bar"
foo = "bar"
Bạn có thể hỏi tại sao không sử dụng like trong bất kỳ ngôn ngữ kịch bản nào? Đó là để tránh lỗi chính tả.
foo = "bar"
fooo = "baz" + foo + "baz" // Oops, is fooo a new variable or did I mean 'foo' ?
name := "John"
chỉ là đường cú pháp cho
var name string
name = "John"
Go được nhập tĩnh, vì vậy bạn phải khai báo các biến.
name := "John"
là viết tắt của var name = "John"
.
var name = "John"
là viết tắt của từ var name string = "John"
viết tắt của hai dòng đã cho.
"var" IdentifierList = ExpressionList .
".
:=
không phải là toán tử gán. Đó là một khai báo biến ngắn. =
là toán tử gán.
Một khai báo biến ngắn sử dụng cú pháp:
ShortVarDecl = IdentifierList ":=" ExpressionList .
Đây là cách viết tắt của một khai báo biến thông thường với các biểu thức khởi tạo nhưng không có kiểu:
"var" IdentifierList = ExpressionList .
Assignment = ExpressionList assign_op ExpressionList .
assign_op = [ add_op | mul_op ] "=" .
Trong name := "John"
cờ vây , là viết tắt của var name = "John"
.
Rob Pike giải thích tại sao cờ vây lại có :=
trong buổi nói chuyện "Nguồn gốc của cờ vây" (2010).
:=
là một toán tử giả trong một ngôn ngữ khác do Pike ký tên là Newsquek (1989). Có ký hiệu Pascal-ish và khả năng suy ra kiểu để khai báo và khởi tạo thành ngữ ( trang 15 )
// variable: [type] = value
x: int = 1
x := 1
Lưu ý ngoài lề: Robert Griesemer đưa ra người :=
điều hành trả lời câu hỏi "Bạn rút ra được một thứ từ cờ vây là gì?" trong phiên QA tại Google I / O 2013. Nhắc đến nó là thuận tiện nhưng có vấn đề .
Cả hai đều là kỹ thuật khai báo biến khác nhau trong ngôn ngữ cờ vây.
var name = "John" // is a variable declaration
VÀ
name := "John" // is a short variable declaration.
Khai báo biến ngắn là cách viết tắt của khai báo biến thông thường có biểu thức khởi tạo nhưng không có kiểu.
Đọc chi tiết bên dưới:
Bối cảnh quan trọng cho câu trả lời:
:=
là một toán tử viết tắt để khởi tạo một biến. Trong Go , các thao tác sau là tương đương:
var myNumb String = "one"
myNumb := "one"
Câu trả lời:
Câu hỏi ngụ ý bây giờ là: "Tại sao lại thiết kế ký hiệu viết tắt :=
để có :
trước dấu =
?". Lý do là để ngăn chặn lỗi chính tả phổ biến. Nếu toán tử gán viết tắt chỉ là =
, thì bạn có thể gặp trường hợp sau:
var myNumb String = "one"
myNumb = "two"
Bây giờ người dùng đã tạo mã đó có ý định gán lại two
cho myNumb
hay anh ta đã nhập sai myNumb
thay vì nhập chính xác myNumbTwo
? Bằng cách thêm dấu hai chấm vào :=
, lập trình viên sẽ phải phạm hai lỗi (quên dấu hai chấm và quên dấu var
) để có lỗi, do đó làm giảm đáng kể xác suất làm như vậy .