Я был отключен около 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”