2010-02-25 26 views

Trả lời

7

Chuyển nhượng cho biến tạm thời trước khi trả lại cho bạn cơ hội kiểm tra và sửa lỗi từ bên trong newPerson() của bạn. Trả lại cuộc gọi mới yêu cầu người gọi phương thức newPerson() của bạn để bắt và khôi phục từ lỗi.

+2

Nếu tiếp tục truy cập vào biến đã được thực hiện, sẽ không có câu hỏi nào vì kịch bản sẽ không còn tồn tại nữa. – Robin

+0

Thực sự, tôi muốn đặt câu hỏi về sự tồn tại của phương pháp này hoàn toàn trong một đánh giá mã. Một dòng mới *() thường trình trả về một người với một số giá trị mặc định? Nếu bạn không định cung cấp một số chức năng bổ sung cho cuộc gọi "new Person()" với phương thức newPerson(), newPerson() là một phương thức có IMO hữu ích hạn chế. Tại sao không chỉ có: người công cộng() {...} nhà xây dựng? Cùng một điều mà không có lớp gọi phương thức. Chúng là sự lựa chọn không kém đối với một phương pháp, nhưng ít nhất hình thức đầu tiên cho bạn cơ hội làm điều gì đó hữu ích cho người dùng mà họ sẽ không gọi cho Người mới() một mình. –

+0

Phương pháp trong ví dụ này là tầm thường. Tôi thích sử dụng các ví dụ đơn giản hơn việc đăng một phương thức thực tế mà tôi đang sử dụng trong mã trực tiếp. – mheathershaw

1

Không ai hiệu quả hơn hệ thống kia, JIT sẽ đưa nó vào hiệu quả nhất khi chạy.

0

Một cách không hiệu quả hơn cách khác, nhưng việc trả về đối tượng được tạo trực tiếp có lẽ là sạch hơn vì bạn đang sử dụng ít biến tạm thời hơn. Nếu bạn phải sử dụng các biến tạm thời, hãy biến nó thành final và đặt tên cho nó một cách thích hợp.

+0

Vui lòng làm rõ nơi biến tạm thời. Tôi luôn luôn mặc dù P là instantiated và một tham chiếu đến P trở lại. Nếu bạn không khai báo P thì một đối tượng vẫn được khởi tạo và một tham chiếu được truyền đi. –

+1

java chuyển biến bởi VALUE nó làm cho một bản sao của P và P rơi ra khỏi phạm vi tại sự trở lại. –

+0

@fuzzy nói gì. Một trình biên dịch tốt có thể tối ưu hóa việc thực thi, nhưng theo như mã nguồn có liên quan, 'p' là một biến tạm thời. Đó đơn giản là những gì nó được gọi. Luôn luôn có được, sẽ luôn luôn được. – polygenelubricants

16

Không có bất kỳ sự khác biệt nào có thể khiến bạn chọn một sự khác biệt về hiệu suất.

  • Vì mục đích gỡ lỗi, trước đây là tốt hơn - tức là khi bạn muốn theo dõi việc thực hiện hoặc đăng nhập một số thông tin giữa tạo và trả lại.
  • Vì lợi ích của khả năng đọc (nhưng điều này là chủ quan) - sau này là tốt hơn.

Nói chung, tôi khuyên bạn nên làm điều sau, và bất cứ khi nào bạn cần gỡ lỗi, hãy chuyển đổi tạm thời sang biến thể đầu tiên (hai dòng).

+0

Tôi cho rằng không dễ đọc hơn cái kia, vậy tại sao lại chuyển đổi tạm thời? Mã mà trình biên dịch JIT tạo ra cho một trong hai mẫu có thể giống hệt 100%. Không khác nhau. Vì vậy, nếu mô hình đầu tiên có bất kỳ lợi thế nào, tuy nhiên, nhẹ, tại sao không chỉ sử dụng nó (hoặc ít nhất là để lại nó khi bạn đã thực hiện thay đổi)? –

+2

tốt, đối với tôi nó dễ đọc hơn để trả lại ngay lập tức. Nhưng khi truy tìm với một trình gỡ lỗi thì sẽ thuận tiện hơn nếu có nó trong hai dòng. Và có lẽ đăng nhập thông tin gỡ lỗi ở giữa. – Bozho

+3

Nó đi xuống nếu bạn đang tối ưu hóa cho khả năng đọc hoặc gỡ lỗi, Người ta có thể lập luận rằng mã được đọc (bởi con người) nhiều hơn nó được gỡ lỗi. –

0

Tùy chọn thứ hai ngắn hơn và dễ đọc hơn.

Tôi nghi ngờ rằng bất kỳ trình biên dịch Java phong nha nào cũng sẽ tạo ra mã ít hiệu quả hơn cho tùy chọn đầu tiên.

1

Trong một thế giới lành mạnh, chúng sẽ biên dịch chính xác cùng mã byte, vì vậy chúng giống hệt như hiệu suất có liên quan. Sau đó, sự khác biệt duy nhất là đối với con người:

Tạo biến tạm thời giúp gỡ lỗi dễ dàng hơn: bạn có thể đặt điểm ngắt trên báo cáo trả về và kiểm tra giá trị p. Trong phiên bản một dòng, điều này khó thực hiện hơn.

Làm điều đó trong một dòng loại bỏ biến số, giảm độ phức tạp, làm cho mã dễ đọc hơn một chút.

Trong thực tế, tôi sẽ viết nó trong một dòng, và trong trường hợp xấu nhất tôi tạo ra một biến tạm thời nếu tôi chạy vào vấn đề gỡ lỗi. Bên cạnh đó, không phải là bài kiểm tra đơn vị phải loại bỏ sự cần thiết phải gỡ lỗi? :-)

Các vấn đề liên quan