Ruby - khi nào nên sử dụng biến đối tượng so với tham số giữa các phương thức?


8

Tôi đang viết một số phương thức gọi các phương thức khác.

Để truyền thông tin tôi có một vài lựa chọn:

  1. Truyền thông tin dưới dạng tham số

  2. Đặt các biến thể hiện để các phương thức khác có thể truy cập chúng

Khi nào tôi nên chọn một tùy chọn khác?

Có vẻ như tùy chọn đầu tiên là tốt vì nó rất cụ thể về những gì đang được thông qua. nhược điểm dường như là rất nhiều giá trị đang được truyền qua.

Phương thức thứ hai không yêu cầu chuyển tất cả các giá trị xung quanh nhưng dường như dẫn đến rất nhiều phép thuật trong đó các phương thức đặt các biến đối tượng 'ở đâu đó'

Tôi có nên luôn luôn rõ ràng về việc được truyền cho các phương thức khác trong lớp không? Có ngoại lệ như vậy này?


2
Đã nhiều lần tôi đã thực hiện một thay đổi để thực hiện các thay đổi hoặc sửa lỗi trong một số mã mà ai đó đã viết bằng tùy chọn # 2. Nó thường là một mớ hỗn độn và những thay đổi trở nên rất tốn thời gian. Ngay cả khi tôi đã sắp xếp xong tất cả, vẫn cần rất nhiều nỗ lực tinh thần để thực hiện các thay đổi vì tôi phải giữ chính xác thời điểm và nơi các biến được khởi tạo hoặc cập nhật.
Học viên của Tiến sĩ Wily

Câu trả lời:


12

Nó phụ thuộc vào vai trò của các biến đó đối với toàn bộ lớp .

Nếu lớp của bạn nhỏ và thông tin mà các biến này vận chuyển có liên quan đến tất cả hoặc gần như tất cả, thì việc lấy chúng làm biến thể hiện có ý nghĩa. Một đối tượng tài khoản ngân hàng có thể cần phải biết chủ sở hữu của nó đối với hầu hết các hành động, do đó, có ý nghĩa để giữ nó vô thời hạn.

Nếu dữ liệu rất cụ thể cho phương thức này và các trình trợ giúp của nó, thì chúng nên di chuyển dưới dạng tham số. Ngày của một giao dịch không phải là một tính năng của tài khoản như là một hành động được thực hiện trên tài khoản đó. (Nếu bạn có nhiều hơn một trong các tham số này và chúng có xu hướng được truyền xung quanh dưới dạng đơn vị (ví dụ: ngày, giờ trong ngày và múi giờ), thì cũng nên khôn ngoan khi bó chúng vào một đối tượng trợ giúp để giữ số lượng tham số xuống.)


14

Hãy để tôi hiểu sai về bạn để làm rõ quan điểm của tôi:

Tôi đang viết một số chức năng gọi các chức năng khác. Để truyền thông tin tôi có hai lựa chọn:

  1. Truyền thông tin dưới dạng đối số.
  2. Sử dụng các biến toàn cục.

Khi nào tôi nên chọn một tùy chọn khác?

Người ta thường thừa nhận rằng nhà nước không phải là địa phương là một ý tưởng tồi. Do đó, bạn thường truyền thông tin bằng cách sử dụng tham số, không thông qua các biến trong phạm vi chung. Điều này trở nên dễ quản lý hơn nếu bạn nhóm thông tin liên quan lại với nhau thành các đối tượng hoặc cấu trúc.

Truyền quá nhiều tham số một mùi mã, và nó có thể được tái cấu trúc để sử dụng thêm một vài lớp. Giả sử một trường hợp bệnh lý trong đó bạn đang viết một cuốn sổ địa chỉ và có một phương pháp add_contact(surname, firstname, fullname, ...). Sẽ tốt hơn nếu nhóm nó thành một Namelớp, tương tự như vậy cho các phần của một địa chỉ : add_contact(name, address).

Tuy nhiên, nếu các tham số cần thiết cho chức năng của bạn hoàn toàn không liên quan, có thể là phương thức của bạn đang cố gắng thực hiện quá nhiều và nên được tái cấu trúc thành các phần nhỏ hơn.

Tôi không nghĩ rằng sử dụng các biến thể hiện là một giải pháp tốt: đó là sự đột biến không cần thiết của trạng thái và mang theo tất cả các vấn đề của biến toàn cục, ở quy mô nhỏ hơn. Cách này nằm mã spaghetti không thể sửa lỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.