Блог

Слишком много методов - Признак плохого кода #4

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

Но не смотря на это я иногда встречаю классы, в которых десятки методов, которые делают совершенно разные вещи. 

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

Но если класс направлен на реализацию какой-то логики, то тут просто необходимо выполнять только одну задачу и не может быть десятков методов. Если у вас в классе даже 10 методов, это уже серьезный вопрос - а не выполняет ли класс больше одной задачи? А действительно эти все методы должны принадлежать одному классу, или перед нами два разных класса? 

Мобильные роботы на базе Arduino

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

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

И вот я купил через интернет книжу "Мобильные роботы на базе Arduino" в PDF версии и уже начал читать. На мой вкус слишком академический язык. Я такого академического не встречал уже давно. Для примера: 

Компьютерная программа - это четко формализованный план, состоящий из команд контроллера (система принятия решений)

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

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

Отдых в Universal парке

Мой мартовский отпуск в Орландо

Отсутствие тестов - Признак плохого кода #3

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

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

Далеко не все имеет смысл тестировать и бывают случаи, когда отсутствие тестов допустимо. Но в большом проекте, когда проект состоит из тысяч строк кода, отсутствие unit тестов подозрительно и могут указывать на серьезные проблемы в коде.

Apple представила новый iPad с поддержкой карандаша

Apple уже не первый раз представляет новые планшеты в конце зимы - начале весны. Я точно не помню даты, но примерно в это время. И вот сегодня была презентация, показали новый ростов iPad. 

И ЭТО ВСЕ? 

Сказала жена депутат после бурной ночи и я после презентации. Я ожидал хоть чуть большее, может улучшение дизайна. А так поставили новый процессор, который уже в принципе существует на рынке какое-то время, добавили поддержку карандаша Apple, который существует уже давно, и выпустили это за доллары, которые уже существуют везде. Просто чуть уменьшили цену, особенно для школ. 

У классов нет свойств - Признак плохого кода #2

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

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

Если в классе можно все методы сделать статичными, и функционал не поменяется, то почему они не статичные? 

Очередной мессенджер Телеграмм

Когда телеграмм только появился, то я не стал его ставить, потому что судя по первой информации, это был просто очередной мессенджер. Для общения с друзьями у меня уже есть социальные сети и всякие вайберы с вотсапами на телефоне. Для родных или друзей, которые пользуются скайпом у меня есть Skype. Для читателей есть сайт, твитер и опять же социальная сети в виде Facebook. В общем, проблем с общением у меня нет, чтобы ставить очередную говорился. 

Я не нарушаю законы страны, в которой живу, поэтому мне скрывать нечего и все обещания защищать мою переписку супер шифрованием мне не интересны. Поэтому в функциях Телеграмма меня интересовало ровным счетом - ничего. 

Umbers - бесплатный пазл для iOS

Вчера в AppStore стала доступна моя новая игрушка Umbers - это просто слово Numbers без первой буквы. Идея простая - нужно соединять одинаковые цифры, перетаскиванием цифр на соседние. В игре три режима - сложение, степерь и аркадный. Если играть в степерь, то лично я могу играть практически бесконечно, слишком простой режим на мой взгляд. Сложение на много труднее, потому что больше разнообразие возможных цифр. Самый интересный для меня - аркада. В этом режиме цифры больше 64 превращаются в бомбы, а помимо цифр иногда появляются кирпичи, которые можно убрать только бомбами. 

Уже есть идеи по улучшению, нужно показывать, какая текущая сумма, потому что под пальцем не видно, прихоидиться держать в памяти. Лично я соединяю не больше двух тайлов. Очень редко подряд соединяю три, поэтому для меня не проблема. Жена любит строить большие цепочки и жалуется. 

Оператор if - Признак плохого кода #1

Если у тебя в коде есть if оператор, который в зависимости от условия выполняет разные действия:

void func() {
	If (type == 1) {
		// логика функции #1
		 . . . 
		 . . . 
	}
	If (type == 2) {
		 // логика функции #2
		 . . . 
		 . . . 
	}
}

Rocket Roll

Давно я не обновлял свои игрушки для iOS, а скоро будет одна новая и потом будут обновления существующих. А пока ты ждешь их (хотя я мало в этом уверен) попробуй Rocket Roll. Это не реклама, мне за это не платили. Автор возможно читает этот блог, но даже не подозревает, что я написал про эту игру. iOS версия. Не знаю, есть ли андроид версия, я не нашел

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

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

Пишите мне