Вопрос

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

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

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

baz = foo + bar

или

answer = first_number + second_number

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

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

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

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

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

Это было полезно?

Решение

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

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

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);
   }

}

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top