Чистый код - Почему стили в разных языках разные?


2 1

Интересное письмо получил и вопрос достаточно интересный, на который можно порассуждать публично:

Вот интересно, если разные способы оформления кода, например в СИ++ я пишу так -  myFunction в С# это выглядело бы так MyFunction()

Например, enum EMyEnum с буквой E начинать MY_CONST  константы с большой буквы и через нижнее подчеркивание

1.1) Вот хотел рекомендации по такому вот оформлению кода спросить?

1.2) А можно ли писать одинаково и в СИ++ и в СИ ШАРП. Ну формально можно называть функции как угодно,не запрещено. Но ведь почему то вот куча кода на си++ начинает функции с мальенкой буквы, а вот в СИ ШАРПном коде функции с большой буквы. Мелочь конечно. Но вот хотел разобраться. Откуда такая разная методика в наименовании? Какая то методология или как?

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

1.3) И главный прародитель вопроса. Почему в СИ++ функции приянто с малеьнкой буквы писать а в СИ ШАРП с большой?

1.4) советы по СИ++ и СИ ШАРП оформлению кода хотел спросить.

1.5) некоторые пишут класс так CMyClass букву С приписывают к имени. Я так не делаю. Вот как вы думаете как надо?

1.6) Enum видел типа как большими буквами MYENUM, сам так тоже писал ранее, больше так не делаю.

1.7) Это что вспомнил вот так сходу. Примеры неплохого оформления кода по СИ++ и СИ ШАРП.  с пояснением. что вот такую конструкцию так то называть, а такое по другому.... Спасибо за внимание!

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

Рекомендации по хорошему стилю меняются. Когда я начинал программировать, то при именовании переменных рекомендовалось использовать префиксы, которые указывали на тип. Например, если это целочисленная сумма, то переменная могла называться iSum (то есть integer sum). Это очень старая рекомендация и я уже не молодой программист.

Стиль кода меняется, как меняется и мода на одежду. Вчера все носили широкие штаны, а сегодня джинсы свисают так, что видно трусы. 

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

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

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

Во-первых – они создавались в разное время и в разное время существовали разные рекомендации. Если язык создан 20 лет назад и авторы использовали лучший стиль по их мнению на тот момент, его никто не будет сейчас менять, поэтому если у всех интерфейсов поставили префикс I, то этот префикс будут ставить и в наши дни, не смотря на то, что некоторые считают это плохим тоном. 

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

Мода на одежду уходит и возвращается и то же самое и в коде. Вкусы на одежду у всех разные и то же самое касается и кода – кому-то нравится именовать методы с большой буквы, а кому-то с маленькой. Кому-то нравится носить короткие джинсы, а кому-то узкие. 

То, что у разных языков программирования разные рекомендации по стилю – это же отлично. Это выбор, это возможность взять тот язык, синтаксис и стиль которого тебе нравится. Представь себе, если стиль Адидаса победил и все компании производили бы одежду только в этом стиле, как бы выглядел мир? Да это ужас. 

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

Это так общий ответ на вопрос, а теперь по некоторым пунктам расскажу чуть более подробно – можно ли писать на разных языках в одном и том же стиле? Можно, но не нужно. Лучше все же следовать рекомендациям этого языка. Ну принято в одном языке именовать переменные и методы одинаково с маленькой буквы, лучше делать так же, чтобы твой код и методы самого языка выглядели в одном стиле, а не в разных. По крайней мере это мое мнение. 

Грамотно ли писать в одном стиле для разных языков – я бы сказал, что нет. Как я уже сказал, лучше придерживаться стиля, который уже используется в языке. Тот же Objective-C рекомендует, чтобы в имени метода находилось еще и имя первого параметра, если он есть. Если в C# метод для загрузки файла будет называться:

DownloadFile(string Url)

То в Objective-C его могут назвать:

DownloadFileFromUrl(string url)

Если вы начнете называть свои методы так же, как в C#, то это будет микс стилей, функции самого API будут отличаться от ваших и на мой взгляд это плохо. 

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

Какие дать советы по оформлению кода в С и C# - могу снова сослаться на свою работу в разделе плюс – учимся программировать красиво. Там реально очень много текста, чтобы повторять его здесь. 

На счет именования классов с буквой С, типа CMyClass – это очень старый стиль, который сейчас некоторые считают плохим тоном. Почему он до сих пор жив – тут я слышал две рекомендации – кто-то рекомендует именовать классы без префикса, а интерфейсы с префиксом I. Другие наоборот рекомендуют именовать интерфейсы без префикса, а классы с C. Я отношусь к первым, потому что использую интерфейсы, но не использую программирование через интерфейсы. Основными у меня все же остаются классы. 

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

Про Enum большими буквами – слышал такое, их вроде бы хотели таким образом отделять от классов, интерфейсов и переменных. Я не очень хорошо отношусь к такому, потому что большими буквами лучше все же оформляют константы. 


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку уже лайкнули 1 человек


Комментарии

Jeka Sylar

23 Декабря 2019

Миша в Канаде есть новогодние корпоративы  


Михаил Фленов

23 Декабря 2019

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


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

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

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

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

Пишите мне