26

Đây là một cái gì đó ban đầu được thảo luận trong một bài thuyết trình được đưa ra bởi Charles Brian Quinn của Big Nerd Ranch tại acts_as_conference. Ông đang thảo luận về những gì ông đã học được từ việc hướng dẫn một Ruby on Rails Bootcamp cho nhiều người vừa mới lập trình vừa mới làm quen với Rails.Để foo bar, hoặc không để foo bar: đó là câu hỏi

Một trang trình bày nổi bật nằm dọc theo các dòng không bao giờ sử dụng foo và bar làm ví dụ khi cố gắng dạy cho ai đó tham gia chương trình. Lý luận của ông rất đơn giản.

Điều nào dễ hiểu hơn?

baz = foo + bar 

hoặc

answer = first_number + second_number 

Nó đã xảy ra nhiều lần bản thân mình khi giải thích một cái gì đó và tôi ngay lập tức nhảy đến đường đi đến foo placeholders thanh nhưng sau đó nhận ra sai lầm của tôi và làm cho ví dụ có ý nghĩa hơn rất nhiều bằng cách sử dụng một kịch bản thế giới thực.

Điều này đặc biệt áp dụng khi cố gắng dạy cho người chưa tiếp xúc với chương trình và bạn cần giải thích foo và bar trước khi giải thích những gì bạn đang thực sự cố dạy.

Tuy nhiên, việc sử dụng foo và thanh cho những người lập trình có kinh nghiệm có vẻ OK, mặc dù cá nhân tôi nghĩ, cùng với Charles, đó là thứ cần phải thay đổi.

Tìm kiếm SO nhanh cho "foo" trả về hơn 20 trang kết quả với foo được sử dụng theo nhiều cách mà tôi có thể hiểu được. Và trong một số trường hợp tôi đang đọc một câu hỏi về một ngôn ngữ cụ thể và tôi đang làm như vậy để giúp hiểu ngôn ngữ đó tốt hơn. Nếu các tên biến được áp dụng được sử dụng thay cho foo và bar, nó sẽ giúp bạn hiểu và giải thích vấn đề dễ dàng hơn nhiều. Vì vậy, đối với các nhà phát triển dày dạn, cấu trúc có vẻ hơi thiếu sót.

Đây có phải là một thói quen có thể bị đá không? Tại sao bạn chọn thanh foo hoặc không thanh foo?

+3

Câu hỏi hay. (+1) –

+1

Bạn cố gắng dạy mọi người sử dụng tên biến tốt và điều đầu tiên bạn làm là ném "foo và bar" vào chúng. Tôi có thể nói điều này là bực bội hơn cho người nói tiếng Anh không khi họ nhận được bối rối và không hiểu những gì foo và thanh là, và có thể nghĩ rằng foo và thanh là cấu trúc ngôn ngữ. –

Trả lời

35

Nó phụ thuộc hoàn toàn vào những gì bạn đang cố gắng dạy. Đôi khi, khi hiển thị một ví dụ về lập trình, bạn phải khai báo một vài điều chỉ để đoạn mã được "hoàn thành", và một vài điều không phải là cốt lõi của những gì bạn đang hiển thị.

Ví dụ, nếu bạn muốn hiển thị như thế nào để ném một ngoại lệ, tôi tin rằng nó là ok để trình bày một đoạn như

public void foo() { 

    // Do some things 

    if (errorCondition) { 
     throw new Exception("Error message"); 
    } 

} 

Kể từ khi điểm trong nó được hiển thị trường hợp ngoại lệ, không có điểm nào trong chu đáo về tên phương thức, vì vậy foo là "hợp pháp" trong ngữ cảnh này, hoặc ít nhất là đối với tôi.

Những gì tôi sẽ không chấp nhận (trong cùng một ví dụ này) sẽ là

public void foo() { 

    // Do some things 

    if (bar) { 
     throw new Exception(baz); 
    } 

} 

vì nó được che khuất những gì bạn đang cố gắng để dạy.

15

Tôi có thể thấy điểm khi nói chuyện với những người không lập trình, nhưng khi bạn đang ở một bảng thảo luận về một vấn đề với một số thành viên trong nhóm .. Tôi sẽ bỏ lỡ foos và thanh của tôi. Tôi nghĩ rằng tỷ lệ foo/bar là một ví dụ về khả năng của hầu hết các lập trình viên suy nghĩ trừu tượng.

Có lẽ nhiều vấn đề hơn nếu bạn đang ở trong trường đào tạo.

+0

Điểm tuyệt vời khi suy nghĩ trừu tượng. Đó là điều tôi chưa bao giờ cân nhắc. – mwilliams

7

Tôi thỉnh thoảng sử dụng chúng. Nhưng chỉ khi một tên "thực" không liên quan.

1

Tôi chọn không để foo và thanh bất cứ khi nào khán giả của tôi là quen thuộc, đủ với các khái niệm ở bàn tay mà nó sẽ chứng minh một thiệt hại cho sự hiểu biết của họ.

Lần duy nhất nên sử dụng Foo và Bar khi bạn đang nói về một điều trừu tượng đến mức việc thêm ngữ cảnh sẽ yêu cầu thảo luận thêm. Sau đó, Foo và Bar là mã dễ đọc hơn nhiều và có thể đọc được nhiều hơn so với các lựa chọn thay thế, như x, y và z.

3

Tôi sử dụng chúng khi chứng minh rằng bất kỳ giá trị nào của 'foo' và 'bar' sẽ đủ, như "bạn có thể nhận được kích thước của một đối tượng có sizeof (foo)". Nó rất tiện lợi cho việc mọi người hiểu khái niệm chung và không chỉ là các chi tiết cụ thể. Ví dụ, nếu tôi nói "bạn có thể nhận được kích thước của một đối tượng với thứ gì đó như sizeof (int)", thì gần như chắc chắn rằng ai đó sẽ hỏi liệu nó có hoạt động với phao không.

0

Tôi mới làm quen với lập trình và ít nhiều tự học. Tôi đọc rất nhiều mã ví dụ trực tuyến và lúc đầu thấy mình thay thế foo và thanh & c. với các tên có liên quan hơn, chẳng hạn như các ví dụ đầu tiên và số thứ hai ở trên.

Bây giờ tôi thích x, y, z, i ... bởi vì foo và bar dường như châm ngòi xung ngôn ngữ trong tâm trí của tôi và có thể khiến tôi mất tập trung, và tôi đã phát triển, phần nào, khả năng giữ toàn bộ các biến khác nhau trong đầu tôi và nhớ chúng là gì. Nhưng tôi chắc chắn sẽ khuyên bạn nên sử dụng cách đặt tên có liên quan khi dạy người khác, đặc biệt là khi giải thích mã cho người nào đó không có chương trình nhưng cần hiểu cách chương trình hoạt động.

1

Tôi nghĩ rằng đó là do nhẹ nhàng, hoặc có thể không quá nhẹ nhàng, châm biếm bản chất của nhiều lập trình viên. Trong khi nhiều người đã cố gắng đặt ý nghĩa khác nhau trên foo/bar nhất, hoặc ít nhất nhiều người trong chúng ta nghĩ về "FUBAR", F ** K Up Beyond All Recognition. Đó là cách để những người "có kinh nghiệm" tạo ra một nhận xét ngắn gọn về mọi người khác.

Bởi vì điều này tôi không bao giờ sử dụng nó cho lập trình viên và hiếm khi sử dụng nó ngay cả với các lập trình viên có kinh nghiệm. Nếu tôi sử dụng bạn có thể đặt cược tôi đang thực hiện một tham chiếu che kín đối tượng trong tầm tay.

+0

Không ai có thể thuyết phục tôi rằng 'foo' và' bar' có ý nghĩa khác biệt và tôi không thích sử dụng chúng. Mã mẫu nên sử dụng các nhãn có ý nghĩa như "kim" và "haystack" – TecBrat

+0

Tôi thấy một sự thay thế tuyệt vời trong các liên kết "câu hỏi có liên quan": 'spam',' eggs' và 'spam_and_eggs'. Nhưng ngay cả những điều này chỉ nên được sử dụng khi nhiều nhãn ngữ cảnh cụ thể làm giảm sự hiểu biết. – TecBrat

1

Trên đầu trang tránh các từ vô nghĩa như foo & thanh, tôi đã tìm thấy nó quan trọng hơn nhiều để cung cấp các ví dụ mã cho các tình huống thực tế có cùng mối quan hệ. Điều này thực sự giúp người học hiểu một chủ đề đúng cách và ngăn chặn sự hiểu lầm. Ví dụ, nếu tôi đang dạy về Dependency Injection và hiển thị mã ví dụ trong đó một thể hiện của lớp Car được đưa vào lớp Driver, không ai sẽ bị nhầm lẫn và nghĩ "Vậy điều đó có nghĩa là Xe điều khiển Trình điều khiển?".

2

Đối với lập trình viên mới hoàn toàn, tôi phải nói rằng các thuật ngữ foo và bar có thể không được biết. Tôi nghĩ rằng họ là một cái gì đó ngôn ngữ cụ thể (cụ thể là C), nhưng sau khi cheking Wikipedia tôi bây giờ biết họ chỉ là người nắm giữ vị trí trừu tượng. Vì vậy, nếu khán giả của bạn bao gồm những người không biết ý nghĩa của họ, cái gì khác là rõ ràng hơn nhiều. Ngoài ra first_number và như vậy nói rằng đó là những con số bao giờ họ được trình bày và không phải cái gì khác.

1

Tôi nghĩ có một lý do quan trọng khác là sử dụng các ví dụ foobar. Những tên này làm rõ rằng bạn không gọi bất kỳ từ khóa ma thuật nào.Bất cứ khi nào tôi đọc một số tài liệu hoặc ví dụ về mã, tôi thích các phần tùy ý của ví dụ để phân biệt rõ ràng với các phần cần thiết.

Nếu bạn thay thế từ vô nghĩa cho những gì nó đại diện đại diện trong mã ví dụ, bạn có thể kết thúc với một số tên trông giống như từ khóa, lớp học hoặc phương pháp bạn đang cố giải thích. Tiền tố "của tôi", như trong myNumber, myFunction, là một thỏa hiệp tốt làm cho tên nổi bật như là tùy ý.

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