Phương thức xâu chuỗi là thực hành các phương thức đối tượng trả về chính đối tượng để kết quả được gọi cho phương thức khác. Như thế này:
participant.addSchedule(events[1]).addSchedule(events[2]).setStatus('attending').save()
Đây dường như được coi là một thông lệ tốt, vì nó tạo ra mã có thể đọc được hoặc "giao diện trôi chảy". Tuy nhiên, đối với tôi, nó dường như phá vỡ ký hiệu gọi đối tượng được ngụ ý bởi chính hướng đối tượng - mã kết quả không biểu thị các hành động thực hiện cho kết quả của một phương thức trước đó, đó là cách mà mã hướng đối tượng thường hoạt động:
participant.getSchedule('monday').saveTo('monnday.file')
Sự khác biệt này quản lý để tạo ra hai ý nghĩa khác nhau cho ký hiệu dấu chấm "gọi đối tượng kết quả": Trong bối cảnh xâu chuỗi, ví dụ trên sẽ đọc là lưu đối tượng tham gia , mặc dù thực tế ví dụ này nhằm lưu lịch đối tượng nhận được bởi getSchedule.
Tôi hiểu rằng sự khác biệt ở đây là liệu phương thức được gọi có được mong đợi trả về một cái gì đó hay không (trong trường hợp đó nó sẽ trả về chính đối tượng được gọi để tạo chuỗi). Nhưng hai trường hợp này không thể phân biệt được với ký hiệu, chỉ từ ngữ nghĩa của các phương thức được gọi. Khi chuỗi phương thức không được sử dụng, tôi luôn có thể biết rằng một cuộc gọi phương thức hoạt động trên một cái gì đó liên quan đến kết quả của cuộc gọi trước đó - với chuỗi, giả định này bị phá vỡ và tôi phải xử lý toàn bộ chuỗi để hiểu đối tượng thực sự là gì gọi là thực sự là. Ví dụ:
participant.attend(event).setNotifications('silent').getSocialStream('twitter').postStatus('Joining '+event.name).follow(event.getSocialId('twitter'))
Có hai lệnh gọi phương thức cuối cùng đề cập đến kết quả của getSocialStream, trong khi các cuộc gọi trước đó đề cập đến người tham gia. Có thể thực tế là viết các chuỗi thực sự thay đổi bối cảnh (có phải vậy không?), Nhưng ngay cả khi đó bạn sẽ phải liên tục kiểm tra xem các chuỗi chấm trông giống nhau trên thực tế có được giữ trong cùng một bối cảnh hay chỉ hoạt động trên kết quả .
Đối với tôi, có vẻ như trong khi phương thức xâu chuỗi một cách hời hợt không tạo ra mã có thể đọc được, việc quá tải ý nghĩa của ký hiệu dấu chấm chỉ dẫn đến sự nhầm lẫn nhiều hơn. Vì tôi không coi mình là một chuyên gia lập trình, tôi cho rằng lỗi là của tôi. Vậy: tôi còn thiếu điều gì? Tôi có hiểu phương pháp xích nào đó sai không? Có một số trường hợp trong đó phương pháp xâu chuỗi đặc biệt tốt, hoặc một số trường hợp đặc biệt xấu?
Sidenote: Tôi hiểu câu hỏi này có thể được đọc như một tuyên bố về ý kiến bị che dấu như một câu hỏi. Tuy nhiên, điều đó không phải - tôi thực sự muốn hiểu tại sao xâu chuỗi được coi là thực hành tốt và tôi đã sai ở đâu khi nghĩ rằng nó phá vỡ ký hiệu hướng đối tượng vốn có.
.
sẽ bỏ qua mọi giá trị trả về mehtod và luôn gọi bất kỳ phương thức xích nào sử dụng cùng một đối tượng.