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

Чистое/ Эффективное кодирование – Пример для начинающих

Я был отключен около 6 месяцев и имею доступ к 2G только в течение последних двух недель или около того. То… С пометкой codenewbie, качество кода, java.

Я был отключен около 6 месяцев и имею доступ к 2G только в течение последних двух недель или около того. В 2G мало что можно сделать, кроме просмотра социальных сетей, проверки электронной почты и, возможно, ведения блога (если этот пост будет загружен).

За 6 месяцев я прочитал (и перечитал) много чего: фанфики о Гарри Поттере, художественную литературу и несколько книг по программированию. Во время чтения Природа кода автор Дэниел Шиффман , я наткнулся на отличный пример для начинающих, демонстрирующий, как хорошая логика программирования может улучшить код. Он пытался продемонстрировать что значит для чего-то просто перемещаться по экрану а также (возможно, случайно) продемонстрировал эффективное кодирование.

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

Я бы порекомендовал всем новичкам прочитать его книгу и посмотреть его обучающие программы на YouTube . (В конце я дам ссылки на многие из его ресурсов).

Что такое хороший/чистый код?

— Бьярне Страуструп, изобретатель C++

Случайный вывод ходока (из Природы Кодовой книги)

Для начала мы сначала создадим Случайного ходока, объект, который перемещается на шаг в случайном направлении через каждый промежуток времени.

Он будет содержать две части данных, координаты X и Y, функцию конструктора и функцию step() для выполнения следующего шага. (Вам также понадобится функция для его отображения, но я не буду этого писать)

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

    class Walker {
        int x;
        int y;
        Walker() {
            // Constructor function to initailize data
            // width & height have the width & height of the output.
            x = width/2;
            y = height/2;
        }
    }

Я начну с ходунка, который может двигаться только в 4 направлениях (вверх, вниз, влево, вправо). Чтобы сделать случайный выбор из упомянутых 4 вариантов, я буду использовать функцию random (n), которая возвращает случайное число с плавающей запятой между 0 и 4 (от 0 до 3,9999999 ….) и использовать функцию int (n) для удаления десятичной части, таким образом, давая нам числа от 0 до 3. Затем, используя простое if-else, я определюсь с направлением.

    void step(){
        int choice = int(random(4));
        if(choice == 0){
            x++; // Move right
        }
        else if(choice == 1){
            x--; // Move left
        }
        else if(choice == 2){
            y++; // Move up
        }
        else {
            y--; // Move down
        }
    }

Этот способ, вероятно, является наиболее распространенным способом сделать это, максимум, что вы можете сделать, это удалить фигурные скобки из дерева if-else, чтобы сократить код.

Иллюстрация возможных шагов (Из Природы Кодовой книги)

Теперь давайте расширим логику до 9 возможных вариантов, 8 направлений (вверх, вверх-влево, влево, вниз-влево, вниз, вниз-вправо, вправо, вверх-вправо) и никуда не пойдем/останемся на том же месте.

Если у вас нет большого опыта в программировании, вы, вероятно, расширили бы код, который мы только что написали, чтобы вместить девять вариантов.

    void step(){
        int choice = int(random(9));
        if(choice == 0){
            x++; // Move right
        }
        else if(choice == 1){
            x--; // Move left
        }
        else if(choice == 2){
            y++; // Move up
        }
        else if(choice == 3){
            y--; // Move down
        }
        else if(choice == 4){
            // Move up-right
            x++;
            y++;
        }
        else if(choice == 5){
            // Move up-left
            x--;
            y++;
        }
        else if(choice == 6){
            // Move down-left
            x--;
            y--;
        }
        else if(choice == 7){
            // Move down-right
            x++;
            y--;
        }
        // We don't need to write code for staying
    }

Как вы можете видеть, это сделает код намного длиннее.

Один из способов сократить его с 8 блоков if-else до всего лишь 4 блоков – это разделить 9 возможностей на две группы по 3 возможности. У ходунка есть 3 варианта по оси X (влево, вправо или остаться) и 3 варианта по оси Y (вверх, вниз или остаться). При использовании двух отдельных случайных функций код будет выглядеть следующим образом:

    void step(){
        int xchoice = int(random(3));
        int ychoice = int(random(3));
        if(xchoice == 0){
            x++; // Move right
        }
        else if(xchoice == 1){
            x--; // Move left
        }
        if(ychoice == 0){
            y++; // Move up
        }
        else if(ychoice == 1){
            y-- ; // Move down
        }
    }

Последний способ, который я покажу, является самым коротким, требующим 0 блоков if-else, и методом, который будет использовать большинство людей. Если вы хорошо умеете замечать вещи и шаблоны (которыми вы становитесь, практикуясь и написав код), вы увидите, что оба X и Y добавляются по 1, вычитаются по 1 или остаются неизменными при вызове step(). Другими словами, во время шага() X и Y добавляются 1, или 0, или -1. Мы можем использовать эту логику, чтобы упростить код всего до двух строк.

    void step(){
        x += int(random(3)) - 1; // int(random(3)) — 1; returns -1, 0 or 1        
        y += int(random(3)) - 1;
    }

Как вы можете видеть в этом примере, есть способы упростить код, если можно распознавать шаблоны. Я уверен, что опытные программисты будут знать множество других подобных примеров (которыми они могли бы поделиться в комментариях, и я рассмотрю возможность их редактирования в этом посте позже). Для тех, кто только начал изучать программирование, я буду рекомендовать читать книги (особенно о природе кода) и наблюдать за тем, как другие люди пишут или просматривают свой код, чтобы изучить другие подобные логики.

Ресурсы Дэниела Шиффмана:

Веб-сайт Твиттер Youtube Github Природа веб-сайта Code

Прочтите это в моем блоге Прочтите это на среднем

Оригинал: “https://dev.to/haideralipunjabi/clean-efficient-coding-an-example-for-beginners-p6b”