Trong số ba thẻ ngôn ngữ bạn đã chọn, tôi chỉ rất familliar với Python, nhưng tôi tin rằng nhiều ngôn ngữ khác có quan điểm tương tự về các khái niệm này. Tất cả các mã ví dụ ở đây là Python.
Tuyên bố là điều được thực hiện; một "hướng dẫn để làm điều gì đó" mà việc thực hiện ngôn ngữ hiểu được. ví dụ.
print "Hello World"
pass
def foo(n):
return n + 1
if condition:
print 'yay'
else:
print 'doh'
Khối trên chứa tuyên bố in, câu lệnh chuyển, câu lệnh định nghĩa hàm và câu lệnh if/else. Lưu ý rằng định nghĩa hàm và câu lệnh if/else là các câu lệnh ghép; chúng chứa các câu lệnh khác (có thể là nhiều câu lệnh, và có thể là các câu lệnh phức hợp khác).
Biểu thức là thứ có thể được đánh giá để tạo ra giá trị. ví dụ.
1
"foo"
2 * 6
function(argument)
None
Biểu thức ở trên chứa biểu thức số, biểu thức cuộc gọi hàm và biểu thức Không có chữ. Khác với chữ và biến, biểu thức được tạo thành từ các biểu thức khác. Trong các số function(argument)
, function
và argument
cũng là cả hai biểu thức.
Sự khác biệt chính là các câu lệnh là các chỉ dẫn cho phép thực hiện ngôn ngữ "đi làm điều gì đó". Các biểu thức được đánh giá thành một giá trị (có thể yêu cầu thực hiện ngôn ngữ để "đi làm một cái gì đó" trên đường). Một hệ quả của việc này là ở bất cứ nơi nào bạn nhìn thấy một giá trị (bao gồm một biểu thức), bạn có thể thay thế bất kỳ biểu thức nào khác và bạn vẫn sẽ nhận được một cái gì đó mà làm cho một số loại ý nghĩa. Nó có thể không biên dịch, hoặc ném ngoại lệ trong thời gian chạy, hoặc bất cứ điều gì, nhưng trên ít nhất một số cấp độ bạn có thể hiểu những gì đang xảy ra.
Tuyên bố có thể không bao giờ xuất hiện bên trong biểu thức (tôi cho rằng điều này không đúng trong Ruby và Javascript theo nghĩa nào đó). và các khối mã chứa các câu lệnh, nhưng đó là loại khác với những gì tôi đang nói). Biểu thức phải có giá trị (ngay cả khi nó là một giá trị không quan tâm như None
). Một câu lệnh là một lệnh; nó không có ý nghĩa để nó xuất hiện như là một phần của một biểu thức, bởi vì nó không có giá trị.
Nhiều ngôn ngữ cũng cho phép sử dụng các biểu thức làm câu lệnh. Ý nghĩa thông thường của điều này là "đánh giá biểu thức này để có được một giá trị, sau đó vứt nó đi". Trong Python, chức năng mà luôn luôn trả None
thường được sử dụng theo cách này:
write_to_disk(result)
Nó được sử dụng như một "lệnh", vì vậy nó trông giống như một tuyên bố, nhưng về mặt kỹ thuật nó là một biểu hiện, chúng ta không thể sử dụng giá trị nó đánh giá cho bất cứ điều gì. Bạn có thể lập luận rằng một "biểu thức trần" là một trong những câu lệnh có thể có trong một ngôn ngữ (và chúng thường được phân tích cú pháp theo cách đó).
Một số ngôn ngữ mặc dù phân biệt giữa các hàm phải được sử dụng như câu lệnh không có giá trị trả về (thường được gọi là thủ tục) và chức năng được sử dụng như biểu thức và cung cấp cho bạn lỗi hoặc cảnh báo về cách sử dụng chức năng như câu lệnh và cung cấp cho bạn một lỗi khi sử dụng quy trình làm biểu thức.
Vì vậy, nếu foo
là một biểu thức, tôi có thể viết 1 + foo
và mặc dù nó có thể dẫn đến lỗi loại, ít nhất cũng có ý nghĩa nhiều. Nếu foo
là một tuyên bố, thì 1 + foo
thường là lỗi phân tích cú pháp; việc thực hiện ngôn ngữ thậm chí sẽ không thể hiểu được những gì bạn đang cố gắng nói.
Một chức năng mặt khác, là một điều bạn có thể gọi. Nó không thực sự là một biểu thức hoặc một tuyên bố trong chính nó. Trong Python, bạn sử dụng câu lệnh def
để tạo hàm và hàm gọi là biểu thức. Tên liên kết với hàm sau khi bạn tạo nó cũng là một biểu thức. Nhưng bản thân hàm này là một giá trị , không chính xác là một biểu thức khi bạn nhận được kỹ thuật, nhưng chắc chắn không phải là một tuyên bố.
Vì vậy, đối với vòng lặp. Đây là vòng lặp for trong Python:
for thing in collection:
do_stuff(thing)
Trông giống như một câu lệnh (một câu lệnh if). Và để chứng minh điều đó, điều này là hoàn toàn vô nghĩa (và một lỗi phân tích cú pháp):
1 + for thing in collection:
do_stuff(thing)
Trong một số ngôn ngữ mặc dù, tương đương với một vòng lặp for là một biểu thức, và có một giá trị, mà bạn có thể thử để thêm 1. Trong một số nó thậm chí là một hàm, không cú pháp đặc biệt được đưa vào ngôn ngữ.
Điều đó thực sự phụ thuộc vào ngôn ngữ của bạn. Nó là gì, Ruby, Python hay Javascript? – deceze
Câu hỏi hay - nó cho thấy bạn đã thực hiện nghiên cứu của bạn, đó là rất lớn. – Purag
@ lừa dối không phải là tất cả các tuyên bố trong ba ngôn ngữ này? –