Для Foo Bar или не Foo Bar: вот в чем вопрос - PullRequest
27 голосов
/ 24 октября 2008

Это было то, что первоначально обсуждалось во время презентации Чарльза Брайана Куинна из Ранчо Большого Ботаника на acts_as_conference . Он обсуждал то, чему он научился, обучая Ruby on Rails Bootcamp многим, как новичкам в программировании, так и новичкам в Rails.

Один особенный слайд, который выделялся, был похож на , никогда не используя foo и bar в качестве примеров, когда пытался научить кого-то программировать . Его рассуждение было очень простым.

Что легче понять?

baz = foo + bar

или

answer = first_number + second_number

Это происходило много раз, когда я сам что-то объяснял, и я сразу же переходил к меткам-заполнителям, но потом осознал свою ошибку и привел в пример гораздо больше смысла, используя сценарий реального мира.

Это особенно применимо, когда вы пытаетесь научить кого-то, кто не имел опыта программирования, и вам в конечном итоге нужно объяснить foo и bar, прежде чем объяснять, что вы на самом деле пытаетесь научить.

Однако использование foo и bar для опытных программистов кажется нормальным, хотя лично я, вместе с Чарльзом, считаю, что это то, что нужно изменить.

Быстрый поиск SO по «foo» возвращает более 20 страниц результатов, при этом foo используется в большем количестве способов, которые я могу понять. И в некоторых случаях, когда я читаю вопрос на определенном языке, я делаю это, чтобы помочь лучше понять этот язык. Если вместо foo и bar используются соответствующие имена переменных, это значительно облегчает понимание и интерпретацию проблемы. Таким образом, для опытных разработчиков, конструкция кажется немного ошибочной.

Является ли это привычкой, которую когда-либо можно будет выгнать? Почему вы выбираете foo bar или не foo bar?

Ответы [ 10 ]

38 голосов
/ 24 октября 2008

Это строго зависит от того, чему вы пытаетесь научить. Иногда, демонстрируя пример программирования, вы должны объявить несколько вещей только для того, чтобы фрагмент был «полным», и эти несколько вещей не являются ядром того, что вы показываете.

Например, если вы хотите показать, как генерировать исключение, я считаю, что можно представить фрагмент, подобный

public void foo() { 

   // Do some things

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

}

Поскольку в этом пункте показаны исключения, нет смысла заботиться о названии метода, поэтому foo является «законным» в этом контексте или, по крайней мере, для меня.

То, что я бы не принял (в этом же примере), будет

public void foo() { 

   // Do some things

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

}

поскольку это затемняет то, чему вы пытаетесь научить.

15 голосов
/ 24 октября 2008

Я вижу смысл в разговоре с непрограммистами, но когда вы у доски, обсуждающего проблему с некоторыми членами команды ... Я бы скучал по своим фу и своим барам. Я думаю, что распространенность foo / bar является примером способности большинства программистов мыслить абстрактно.

Вероятно, больше проблем, если вы находитесь на тренировочной арене.

7 голосов
/ 24 октября 2008

Я использую их иногда. Но только если «настоящее» имя не имеет значения.

3 голосов
/ 24 октября 2008

Я использую их, когда демонстрирую, что достаточно значений «foo» и «bar», например «вы можете получить размер объекта с помощью sizeof (foo)». Это удобно для того, чтобы люди поняли общую концепцию, а не только детали. Например, если бы я сказал: «Вы можете получить размер объекта с помощью чего-то вроде sizeof (int)», то почти гарантированно кто-то спросит, работает ли это также для float.

2 голосов
/ 15 мая 2009

Для совершенно нового программиста я должен сказать, что термины foo и bar могут быть неизвестны. Я думал, что это что-то специфическое для языка (а именно C), но после проверки Википедии я теперь знаю, что они просто абстрактные заполнители. Так что, если ваша аудитория состоит из людей, которые не знают их значения, что-то еще намного яснее. Кроме того, first_number и т. Д. Говорит, что это числа, как только они представлены, а не что-то еще.

1 голос
/ 17 июня 2012

Я думаю, что есть еще одна важная причина для использования foo и bar в примерах. Эти имена дают понять, что вы не используете магические ключевые слова. Всякий раз, когда я читаю некоторую документацию или примеры кода, мне нравится, чтобы произвольные части примера были четко отделены от необходимых частей.

Если вы заменили бессмысленное слово тем, что оно в общем случае представляет в коде примера, вы можете получить имена, которые во многом похожи на ключевые слова, классы или методы, которые вы пытаетесь объяснить. Префикс «my», как в myNumber, myFunction, является хорошим компромиссом, который выделяет имена как произвольные.

1 голос
/ 07 января 2009

Помимо того, что я избегал бессмысленных слов, таких как foo & bar, я обнаружил, что гораздо важнее предоставлять примеры кода для реальных сценариев, которые имеют такие же отношения. Это действительно помогает ученику правильно понять тему и предотвращает недопонимание. Например, если я учу о внедрении зависимостей и покажу пример кода, где экземпляр класса Car внедряется в класс Driver, никто не запутается и не подумает: «Значит, это значит, что Car контролирует Driver тогда?».

1 голос
/ 07 января 2009

Я думаю, что это происходит из-за мягкой или, возможно, не такой мягкой, саркастической природы многих программистов. В то время как многие люди пытались поместить различные значения в foo / bar, большинство или, по крайней мере, многие из нас думают о «FUBAR», F ** K Up Beyond All Recognition. Это способ для "опытных" людей сделать глупый комментарий обо всех остальных.

Из-за этого я никогда не использую это для не программиста и редко использую это даже с опытными программистами. Если я использую, вы можете поспорить, что я делаю завуалированную ссылку на предмет под рукой.

1 голос
/ 24 октября 2008

Я предпочитаю не зацикливаться на запретах, когда моя аудитория достаточно знакома с имеющейся концепцией, которая может нанести ущерб их пониманию.

Единственное время, когда следует использовать Foo и Bar, это когда вы говорите о чем-то настолько абстрактном, что добавление контекста потребует дополнительного обсуждения. Тогда Foo и Bar гораздо более читаемый и созданный код, который более понятен, чем альтернативы, такие как x, y и z.

0 голосов
/ 07 января 2009

Я новичок в программировании и более или менее самоучка. Я прочитал много примеров кода в Интернете и в начале заменил foo и bar & c. с более релевантными именами, такими как примеры firstnumber и secondnumber выше.

Теперь я предпочитаю x, y, z, i ... потому что foo и bar, кажется, вызывают лингвистические импульсы в моем разуме и могут отвлекать меня от рутины, и я несколько выработал способность удерживать целое куча разных переменных в моей голове и помните, что они есть. Но я все равно определенно рекомендую использовать соответствующие названия при обучении кого-то другого, особенно при объяснении кода тому, кто не программирует, но должен понимать, как работает программа.

...