2016-04-19 19 views
6

Tôi có thói quen này của thụt một nhóm các chức năng cuộc gọi như thế này:nhóm Indent quy ước các biến chức năng gọi

List <Dog> dogs = new ArrayList<>(); 
    dogs.add(new Dog(1)); 
    dogs.add(new Dog(2)); 
    dogs.add(new Dog(3)); 
    dogs.add(new Dog(4)); 
    dogs.add(new Dog(5)); 
System.out.println("list of dogs: " + dogs); 
Cat cat1 = new Cat(1); 
    cat.meow(); 
    cat.startsRunningFrom(dogs); 
Dog d1 = dogs.get(1); 
d1.catches(cat1); 

Là những thực hành thực sự là một xấu trong một quy ước mã, hoặc những đã không thực sự được nói chuyện trong khoảng? Bởi vì tôi đã cố gắng để tìm một số quy ước mã mà sẽ đề nghị thụt đầu dòng như vậy trên các cuộc gọi chức năng từ các biến số/lớp nhất định.

Đối với tôi, các mã trên là nhiều hơn nữa có thể đọc hơn mà không:

List<Dog> dogs = new ArrayList<>(); 
dogs.add(new Dog(1)); 
dogs.add(new Dog(2)); 
dogs.add(new Dog(3)); 
dogs.add(new Dog(4)); 
dogs.add(new Dog(5)); 
System.out.println("list of dogs: " + dogs); 
Cat cat1 = new Cat(1); 
cat.meow(); 
cat.startsRunningFrom(dogs); 
Dog d1 = dogs.get(1); 
d1.catches(cat1); 

Các vết lõm cho tôi cung cấp một sự tách biệt rõ ràng từ khai báo biến và hoạt động chức năng khác, với các hoạt động sau đây liên quan chặt chẽ trên các biến.

Ai có thể bình luận về lý do tại sao tất cả điều này là một thực hành không tốt, hoặc nếu nó thường chấp nhận được bên ngoài các mã được cung cấp (bên ngoài một hoạt động Danh sách).

Trả lời

2

Đây có phải là những thực tiễn không tốt trong quy ước mã hay không thực sự được nói đến?

Vâng, điều đó còn tùy thuộc! Nếu bạn đang làm việc trên nguồn mở thì bạn phải tuân theo các hướng dẫn khá nhiều. Không có gì giống như một xấu/tốt trừ khi đồng nghiệp của bạn là tốt với nó. Trên thực tế, tất cả mọi người trong Nhóm của tôi đều sử dụng các trình định dạng mã và có các quy tắc được xác định trước cho nhận xét và khoảng trống, v.v. Chúng tôi cố gắng tuân theo các quy tắc tương tự để dễ dàng nhận ra sự khác biệt trong khi hợp nhất mã trở lại kho lưu trữ chính.

Điều khác là, tôi rất quen với việc nhìn thấy các quy ước được chấp nhận chung bên dưới đoạn mã lừa tôi trong giả định bắt đầu và kết thúc của một khối.

List<Dog> dogs = new ArrayList<>(); 
----> dogs.add(new Dog(1)); 
     dogs.add(new Dog(2)); 
     dogs.add(new Dog(3)); 
     dogs.add(new Dog(4)); 
     dogs.add(new Dog(5)); <---- 
System.out.println("list of dogs: " + dogs); 

Không có hại trong việc sử dụng các quy ước như vậy, nhưng như tôi đã nói trước đó, nó phải được chấp nhận bởi các đồng nghiệp của bạn trong môi trường mà bạn đang làm việc.

+0

Tôi đồng ý rằng nó chủ yếu là một câu hỏi dựa trên ý kiến, nhưng chỉ tự hỏi liệu đó có thực sự là một thực hành không tốt nên tránh hầu như mọi lúc. Nhận xét của bạn về cách nó có thể trông giống như nó trong một khối mã là những gì tôi đang tìm kiếm, cho dù nó thực sự không hiệu quả hoặc có thể dẫn đến lỗi. Tôi muốn nghĩ rằng sự thụt lề của tôi là một khối mã ảo. Vì vậy, tôi đoán không có gì thực sự sai với nó. Cảm ơn bạn – samiunn

2

Tôi đánh giá cao suy nghĩ của bạn và tôi không nghĩ rằng có bất kỳ điều gì vốn không tốt về những gì bạn đang làm. Nhưng thực tế là trong các tổ chức mà nhiều nhà phát triển sẽ làm việc trên cùng một mã, điều quan trọng là phải có các quy tắc phong cách nhất quán. Các quy tắc chính xác sẽ thay đổi từ tổ chức thành tổ chức hoặc từ nhóm này sang nhóm khác trong tổ chức (nơi tôi làm việc, các nhóm khác nhau có thể áp dụng các kiểu khác nhau, mặc dù sẽ không hoàn toàn khác nhau). Nhưng khi nói đến những thứ như thụt đầu dòng, khoảng cách, nơi bắt đầu một dòng mới, vv, lợi ích của một phong cách nhất quán thường vượt trội hơn bất kỳ lợi ích nào bạn có thể nhận được bằng cách thực hiện nó theo cách có vẻ hợp lý hơn với bạn. Đôi khi tôi không thích những lựa chọn phong cách được áp đặt lên tôi, nhưng trong những vấn đề như thế này thì nó không đáng tranh cãi hơn. Tuy nhiên, nếu bạn đang ở trong một nhóm, bạn có thể cố gắng thuyết phục họ rằng phong cách của bạn tốt hơn trong một trường hợp như thế này. Tuy nhiên, nhược điểm của việc làm theo cách của bạn là một bộ quy tắc đơn giản hơn có thể được lập trình thành một IDE mà sau đó sẽ tự động sắp xếp mọi thứ theo phong cách của nhóm bạn.

Trong trường hợp này, nếu bạn đang cố gắng sử dụng thụt đầu dòng để biểu thị một đoạn mã nhất định đi cùng nhau, tôi có thể đề nghị bạn chuyển chúng vào phương thức trợ giúp của riêng chúng không? Điều đó sẽ hoàn thành những gì tôi nghĩ bạn đang cố gắng làm.

Ngoài ra, trong trường hợp bạn có danh sách và đang thêm một số mục vào danh sách, bạn nên xem Google Guava, một số phương pháp để thiết lập danh sách có cuộc gọi có số lượng đối số thay đổi (ví dụ: newArrayList trong số Lists class.

1

Điều này phần nào là ý kiến ​​/ theo quyết định của nhóm. Tuy nhiên, tôi đồng ý rằng thụt đầu dòng của bạn tốt hơn là không thụt lề. Tôi nghĩ đây không phải là giải pháp tốt nhất. :

List<Dog> dogs = initializeDogs(); 
System.out.println("list of dogs: " + dogs); 
initializeCat(dogs); 
Dog d1 = dogs.get(1); 
d1.catches(cat1); 

Và sau đó khai báo phương thức trợ giúp để thực hiện những gì bạn cần:

private ArrayList<Dog> initializeDogs() { 
ArrayList<Dog> dogs = new ArrayList<>(); 
dogs.add(new Dog(1)); 
dogs.add(new Dog(2)); 
dogs.add(new Dog(3)); 
dogs.add(new Dog(4)); 
dogs.add(new Dog(5)); 
return dogs; 
} 

private void initializeCat(List<Dog> dogs) { 
Cat cat1 = new Cat(1); 
cat.meow(); 
cat.startsRunningFrom(dogs); 
} 

Vấn đề là quy ước thụt lề của bạn có thể không cần thiết nếu bạn đóng gói các phương pháp bằng cách sử dụng các phương pháp hay nhất.

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