Рубрики
Без рубрики

Фу, Бар, Уродливый

Улучшение примеров кода. Помечено как наставничество, java, foo, преподавание.

Источник изображения: cinetropolis.net

Когда я выучил свой первый язык программирования Java, я просто забросил свои вопросы в Google. Web ™ предлагает множество полезных руководств, и, конечно, мы все знаем StackOverflow, но со многими из них есть небольшая проблема.

Примеры кода

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

Конкретно: Примеры плохого кода

К сожалению, кто-то однажды решил, что было бы неплохо создавать примеры кода, используя полностью вымышленные идентификаторы без какого-либо смысла; хорошие, плохие, уродливые: Foo , Бар , и Баз .

Они использовались для обозначения сущностей, таких как переменные, функции и команды, точная идентификация которых не имеет значения и служит только для демонстрации концепции. Википедия

Почему эти слова плохие?

Давайте посмотрим на пример (пример использования этих ключевых слов). БОЖЕ, какая мета! Этот пример демонстрирует, как работают интерфейсы в Java:

interface Foo {
    void foo();
}

class Bar implements Foo {
    @Override 
    public void foo(){
        System.out.println("Bar");
    }
}

class Baz implements Foo {
    @Override 
    public void foo(){
        System.out.println("Baz");
    }    
}

// ... later
void baz(Foo foo){
    foo.foo();
}

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

Ключевым свойством примеров является то, что они могут быть связаны с. Таким образом, выбор вымышленного и бессмысленного слова противоречит самому определению понятия “пример”. С помощью Фу , вы не предоставляете контекст.

Что нам следует делать вместо этого?

Разве этот пример интерфейсов не было бы намного проще понять:

interface SomethingThatPurrs {
    void purr();
}

class Cat implements SomethingThatPurrs {
    @Override 
    public void purr(){
        System.out.println("*purring cat*");
    }
}

class Kitten implements SomethingThatPurrs {
    @Override 
    public void purr(){
        System.out.println("*purring kitten*");
    }    
}

// ... later
void makeThatThingPurrSomehow(SomethingThatPurrs purring){
    purring.purr();
}

Кошки и котята создают контекст. Внезапно становится очень легко увидеть, что они оба могут мурлыкать, и как То, что Мурлычет, должно как-то относиться к обоим. Это потому, что вы знаете, что и кошки, и котята мурлыкают.

Я видел, как новички задавались вопросом, что Фу и Бар на самом деле означает, пока кто-нибудь не скажет им, что в этом нет скрытого смысла. Некоторые даже думают, что Foo и Bar забавны, что, в свою очередь, мотивирует учителей создавать примеры, используя эти имена.

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

Вывод

  • Foo и Bar не предоставляют контекста
  • Примеры должны содержать как можно больше контекста
  • Фу и Бар нетворческие и скучные
  • Котята милые и вдохновляющие

Фу и Бар говорят, что они происходят от военной аббревиатуры “ФУБАР”, которая расширяется до “Облажался до неузнаваемости”. Какое совпадение.

Оригинал: “https://dev.to/johannesvollmer/the-foo-the-bar-the-ugly-5c71”