Hãy để tôi bắt đầu bằng cách nói rằng tôi bắt đầu lập trình bằng Visual / Real Basic, sau đó chuyển sang Java, vì vậy tôi khá quen với việc chấm cú pháp. Tuy nhiên, cuối cùng khi tôi chuyển sang Objective-C và làm quen với dấu ngoặc, sau đó thấy phần giới thiệu Objective-C 2.0 và cú pháp dấu chấm của nó, tôi nhận ra rằng tôi thực sự không thích nó. (đối với các ngôn ngữ khác thì không sao, vì đó là cách chúng cuộn).
Tôi có ba loại thịt bò chính với cú pháp dấu chấm trong Objective-C:
Thịt bò # 1: Không rõ tại sao bạn có thể mắc lỗi. Ví dụ, nếu tôi có dòng:
something.frame.origin.x = 42;
Sau đó, tôi sẽ gặp lỗi trình biên dịch, vì something
là một đối tượng và bạn không thể sử dụng cấu trúc của một đối tượng làm giá trị của một biểu thức. Tuy nhiên, nếu tôi có:
something.frame.origin.x = 42;
Sau đó, điều này biên dịch tốt, bởi vì something
bản thân một cấu trúc có một thành viên NSRect, và tôi có thể sử dụng nó như một giá trị.
Nếu tôi đang sử dụng mã này, tôi sẽ cần dành một chút thời gian để cố gắng tìm ra nó something
là gì . Nó có phải là một cấu trúc không? Nó là một đối tượng? Tuy nhiên, khi chúng ta sử dụng cú pháp ngoặc, nó rõ ràng hơn nhiều:
[something setFrame:newFrame];
Trong trường hợp này, hoàn toàn không có sự mơ hồ nếu something
là một đối tượng hay không. Giới thiệu mập mờ là thịt bò # 1 của tôi.
Beef # 2: Trong C, cú pháp dấu chấm được sử dụng để truy cập các thành viên của cấu trúc, không phải phương thức gọi. Người lập trình có thể ghi đè các phương thức setFoo:
và foo
đối tượng, nhưng vẫn truy cập chúng qua something.foo
. Trong tâm trí của tôi, khi tôi nhìn thấy các biểu thức sử dụng cú pháp dấu chấm, tôi mong đợi chúng là một phép gán đơn giản thành một ivar. Đây không phải là luôn luôn như vậy. Hãy xem xét một đối tượng bộ điều khiển trung gian một mảng và một chế độ xem bảng. Nếu tôi gọi myController.contentArray = newArray;
, tôi sẽ mong đợi nó sẽ thay thế mảng cũ bằng mảng mới. Tuy nhiên, lập trình viên ban đầu có thể đã ghi đè setContentArray:
để không chỉ đặt mảng mà còn tải lại chế độ xem bảng. Từ dòng, không có dấu hiệu của hành vi đó. Nếu tôi muốn nhìn thấy[myController setContentArray:newArray];
, sau đó tôi sẽ nghĩ "Aha, một phương pháp. Tôi cần đi xem định nghĩa của phương pháp này chỉ để đảm bảo rằng tôi biết nó đang làm gì."
Vì vậy, tôi nghĩ rằng bản tóm tắt của tôi về Beef # 2 là bạn có thể ghi đè ý nghĩa của cú pháp dấu chấm bằng mã tùy chỉnh.
Thịt bò # 3: Tôi nghĩ nó có vẻ tệ. Là một lập trình viên Objective-C, tôi hoàn toàn quen với cú pháp ngoặc, vì vậy việc đọc dọc và nhìn thấy các dòng và dòng trong dấu ngoặc đẹp và sau đó đột ngột bị ngắt với foo.name = newName; foo.size = newSize;
vv là một chút phân tâm đối với tôi. Tôi nhận ra rằng một số thứ yêu cầu cú pháp dấu chấm (cấu trúc C), nhưng đó là lần duy nhất tôi sử dụng chúng.
Tất nhiên, nếu bạn đang viết mã cho chính mình, thì hãy sử dụng bất cứ thứ gì bạn cảm thấy thoải mái. Nhưng nếu bạn đang viết mã mà bạn đang có kế hoạch tìm nguồn mở hoặc bạn đang viết thứ gì đó mà bạn không mong đợi sẽ duy trì mãi mãi, thì tôi thực sự khuyến khích sử dụng cú pháp ngoặc. Tất nhiên, đây chỉ là ý kiến của tôi.
Bài đăng trên blog gần đây chống lại cú pháp dấu chấm: http://weblog.bignerdranch.com/?p=83
Bác bỏ bài đăng trên: http://eschatologist.net/blog/?p=226 (với bài viết gốc ủng hộ cú pháp chấm: http://eschatologist.net/blog/?p=160 )