Pull to refresh

Comments 165

Достаточно сказать что это вообще нужно использовать, так как начинают почти все с myverysupermegacoolvariable. А уж что выбрать зависит от личных предпочтений и тех библиотек/фреймворков которые используются в разработке.
Это ещё хорошо. Обычно бывает
bb = j3+a;
мозговая обфускация) видели и такое…
Самое весёлое, что автор кода всё это понимает и знает чуть ли не наизусть…
UFO just landed and posted this here
А через месяц после того, как я увидел подобный код, его автор уже там не работал. Я, впрочем, тоже.
а разве это плохо если не более 2-3 слов?

username
introtext
menutitle

camelCase симпатичный, но иногда не хочет нажимать на шифт) а иногда не хочется использовать заглавные буквы (базы данных)

under_score в целом менее удобный потому что иногда непонятно, почему в одном случае надо писать first_name, а в другом nickname (путаница с составными словами); кроме того, подчеркивание как разделитель не получается использовать…

вот пользуясь случае, вопрос:

как должна называться связь в БД если одна табличка называет user_profiles, а вторая user_relationships, очевидно, что user_profiles_user_relationships, но тут получается путаница, дефисы и заглавные буквы использовать нельзя (заглавные можно, но лучше не использовать)… очень большой соблазн назвать таблички просто userprofiles и userrelationships
user_profiles_2_user_relationships или user_profiles_to_user_relationships :)
Оракл (с его 30 символами на идентификатор) вам руки не подаст!
оракл он такой, да.
но исходное имя user_profiles_user_relationships уже имеет длину 32 символа :)
То, что вы используете в своих проектах называется венгерской нотацией.
Вы видимо не знаете, что такое Венгерская нотация. Нет, это не то, чему учили вас в школе, что к переменной вначале прибавляется буква, обозначающая тип переменной.

Чарльз Симонии представил соглашение об именах идентификаторов, в котором для указания функционального назначения объекта, представленного идентификатором используется добавление префикса к имени идентификатора.

Понимаете? т.е. pX — Указатель на X., а dX Различие между двумя образцами типа X.

А не то, что принято считать, что sVar — это переменная вида string
Это всего лишь одно из применений нотации. Сама нотация предполагает наличие какого-либо префикса перед именем. В вашем примере префикс отмечает смысловую нагрузку, так же часто используется указание типа. Нотация не ограничивает конкретные префиксы. Соглашение о системе префиксов выбирают сами программисты. Не стоит тыкать в то, что «кто-то впервые предложил». Вещам присуще свойство эволюционировать.
При современном развитии интеллектуальности IDE смысла в префиксе обозначающем тип тем более нет. Поэтому простое отображение типа является деградацией «впервые предложенного».
Разве мои слова как-то противоречат этому?
если речь идет о C++, то IDE сосет.
если о чистом C, то там вообще из коробки нет продвинутой системы типов, и кроме как нотацией их показать нельзя.
венгерская нотация применяется, в основном, как раз в C/C++.
NetBeans, Eclipse, VS прекрасно отображают тип переменной при наведении на нее курсора как в C, так и в C++. При чем одинаково хорошо как для встроенных типов, так и для определенных пользователем. В чём оно «сосёт»?
Во встроенных макросах и внешних препроцессорах. Ну да, внутри одного метода оно тип подсветит. А дальше — как бох на душу положит. Но проблема-то глубже. Сегодня VS в каком-то из Qt'шных методов упорно отображала возвращаемый тип как char*, хотя там была ни разу не char* и вообще inline. Поэтому если знаешь какую-то инфу, которую IDE может и не достать, нужно эту инфу тут же укатать в документацию или имена, чтобы с одного взгляда было понятно как и зачем это работает, и не требовалось читать исходник. Лучше пусть метод будет называться calculate_this_fuckin_variable_because_we_must_and_return_int (как в ObjectiveC), чем будет непойми что, работающее непойми как. Имхо.
Там есть отличный пример, описанный в «Возможное Решение #2 », когда венгерской нотацией стараются подпереть как костылём неправильную архитектуру приложения. Необходимо отрефакторить код, view вынести во view и не потребуется больше никаких «us» и «s».
Полностью согласен. Просто в данном разговоре речь шла именно о применении венгерской нотации.
Вернее — неправильным использованием венгерской нотации :).
У Спольски была статья про это.
Я соглашусь, что прямое указание типа у переменной даже в динамически типизируемых языках затея не самая здравая. Но нельзя же отрицать существование феномена.
Феномен как раз в неправильном употреблении.
Забивать гвозди микроскопом можно, но называть этот процесс микроскопией всё-таки неправильно :)
Терпеть не могу (я бы даже сказал «люто бешено ненавижу и стремлюсь уничтожить») уродства типа этого:

$functionResult=idioticUglyFunction($stupidVariable),

а люблю вот это:
$function_result=beautiful_lovely_function($awesome_variable).

Как аргумент против коллег — любителей гадкого camelCase привожу документацию пхп: все стандартные функции в нижнем регистре и с подчеркиванием (*гадость из SPL стандартной не считать*).

PS.
Не холивара ради. Просто иррационально ненавижу одно и обожаю другое.
Вот только пример с php неудачный. Уж у этих парней в названиях всякого хватает, и с подчеркиваниями, и без, и с логикой, и без неё.
Сохраните нервы — попробуйте не обращать внимания :)
SPL хотя бы имеет какой-то стандарт в отличии от функций, что уже подметили выше. Кроме того, не только то что в рамках SPL имеет camelCase нотацию, напрмиер, большинство ООП вещей в станадртной поставке и модулях. Да и тенденция в PHP явно к camelCase.
При всей моей любви к PHP на названия функций в этом языке не стоило бы ориентироваться. Взять хотя бы функции работы со строками — половина с нижним подчеркиванием, половина — без. Вот хотя бы например stripcslashes и strip_tags — в чем прикол? В одном случае есть подчеркивание, в другом — нет. Как раз таки SPL, как более поздняя разработка, сделана с учетом camelCase как и все прочие разработки Zend (в том числе и Zend Framework), а старые функции с плавающими пробелами — это дань прошлому, естественно сейчас никто ничего менять не будет, ибо надо сохранить совместимость с раними версиями.
Если не ошибаюсь, то имена ф-ций в пхп case-insensitive. И такие ф-ции, как stripcslashes, можно писать как stripCSlashes. Мне что-то подсказывает что так и задумывалось. Это еще больше подтверждает, что смотреть на именование ф-ций безсмысленно, там полная каша.
Там никак не задумывалось :)
Автор пехапе писал на коленке шаблонизатор для своего сайта, друзья присылали ему новые функции, он их просто добавлял в язык не задумываясь о какой-нибудь стандартизации. Потом язык стал популярным, и корявые имена функций исправлять было поздно.

Я надеялся, что с переходом на 5.3 или хотя бы на 6.0 функции упорядочат, но увы…
Так а что, уже известно, что в 6-й это все гавно оставят?
Пока ещё даже точно не известно, будет ли 6-я версия :)
Фух, у меня все-таки теплится надежда, что к 6-й версии (а лучше раньше) проведут чистку этого говна. Сам готов поучавствовать в рефакторе.
Реквестирую тонны срача в комментариях к этому посту :)
Я использую camelCase для переменных, а для функций — under_score.
Например:
$myVariable = 123;

function print_variable($variableToPrint) {
     echo $variableToPrint; 
}
а я наоборот :)
для меня Ваш вариант — разрыв шаблона :)
Я думаю данный холивар актуален только лишь для некоторыз языков. Если вы пишете, скажем на Java или на Руби, врят ли вы будете думать над нотацией — она являвется стандартной для языка.
Damian Conway — Perl Best Practices

Use underscores to separate words in multiword identifiers.

TheAlternativeInterCapsApproachIsHarderToReadAndInParticularDoesn'tGeneralizeWellToALLCAPSCONSTANTS
Не люблю, когда передёргивают. При использовании подчёркиваний операторы отбиваются пробелами.

Таким образом:

my_first_var = my_second_var - my_third_var
и
myFirstVar=mySecondVar-myThirdVar


Более того, при вызове принято так же отбивать пробелами скобки:

other_function( first_argument, second_argument );
С первым согласен, а вот со вторым не совсем. Например, Visual Studio сама по умолчанию будет убирать эти пробелы при каждом удобном случае.
Её не сложно отучить это делать…
Да, но зачем?

Это должна быть заранее оговорённая политика все команды, принимающей участие в разработке. Иначе почти каждый commit будет содержать автоправку от среды.

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

Каждому новому сотруднику придётся их вдалбливать.
Это если у вас стартап какой-нибудь.
А если у вас конторе 30 лет и куча написанного кода и стандарты кодирования определенные?
Мало ли какие настройки для форматирования кода будут в очередной версии очередной среды…
согласен. Хотя недавно встречал интересный пример кода, там пробелы стояли даже перед точкой с запятой, перед скобкой, после скобки, вот в таком стиле:
a = func ( param, param2 [ 5 ] );
это был ад… :)
Я всегда обрамляю операторы пробелами, и никаких проблем с кодом в любой нотации. Хоть в эмо-стиле оформляй: mYfIrStVaR = mYsEcOnDvAr — mYtHiRdVaR
Во многих стайл гайдах и при использовании camelCase требуется отбивать операторы (а то и всё подряд) пробелами. А вот требований отбивать аргументы при декларировании/вызове как-то не встречалось кажется.
>… в языке Java и его младшей сестре JavaScript…
Кто-то ввел вас в заблуждение. Кроме 4-х одиаковых букв, между ними ничего общего.
Сорри, не заметил что это перевод.
кроме того что это перевод, я в конце отметил что это разные вещи и автор заблуждается :)
Стоит ли автору верить?
Кстати, почему сестра? оО Какого рода слово «язык» — вроде б не женского?:)
for Java and its little sister JavaScript

Я думаю потому что Ява — она :)
В английском языке род имеют мужчины, женщины и морские корабли (которые женского рода). Всё остальное — среднего. Ввиду этого они привыкли обращаться с родами вольно.
В русском — да, «Java» женского рода, но «JavaScript» и «язык»-то — мужского.

Я бы, в общем, в русском переводе написал что-то вроде «Java и её младший брат JS». Хотя, видимо, это коробит только меня:)
Не только морские. Космические тоже she
Звонят из морга в спортивный магазин:
— Сколько ваша сеть продала мотоциклов Ява сегодня?
— Если верить базе, 50.
— Ясно. Двое еще ездят…
Стиль кода общий (похожий).
Пишу проекты, построенные на технологии ajax, поэтому мне удобно писать всё, что относится к php, на under_score, а всё, что относится к js, на camelCase. Путаницы значительно меньше.
Контактные данные забыл оставить.
«сколько нужно SEOшников, чтобы вкрутить лампочку, лампа, лампы накаливания...» (с)
camelCase не так бьёт по читабельности, как расположение скобок в стиле BSD. Большой гемор потом помочь человеку найти или в чужом коде найти эти скобки: где потерялась.
BSD? Вы уверены, что их так сложно найти? По-моему вы имели ввиду какой-то другой стиль.
имел именно BSD code-styling
for (var child = parentNode.firstChild; child; child = child.nextSibling) {
  doSomething(child);
}
Наверное вы все-таки не про BSD, а про K&R или GNU.
Та не, наверное таки про BSD
Кроме того, с коллегами очень много споров было на тему аббревиатур при использовании верблюжьей нотации: как писать правильнее GenerateHTMLFromText или GenerateHtmlFromText, в итоге остановились на втором варианте, но чувство нерешенной проблемы все равно немного грызет.
Для себя установил правило: если в аббревиатуре больше двух букв — прописной делать только первую букву (XmlRequest), если две буквы — оставлять обе прописные (ADUser).
В частности, в Java есть четкая граница в 3 буквы: XML пишется прописными, но Html пишется уже строчными. Точно такая же граница в 3 буквы установлена и в ActionScript 3. В остальных языках можно писать как угодно.
В Pascal написание имен с использованием разных регистров имеет важное, но лишь декоративное назначение, так как компилятор между регистрами символов различий не делает.
//офтопик
откуда это вообще пошло «нижнее подчеркивание»? как можно ПОДчеркнуть выше?!!! О_о
UFO just landed and posted this here
Спасибо за ликбез! Хоть это и не повод оказываться от рудиментов)
Ну и что? Это говорит не о том, что данная фигура речи является правильной, а лишь о том, что ошибка давняя и укоренившаяся.
UFO just landed and posted this here
Насколько я знаю, Java был спроектирован с нуля.
Легче поверить в общего предка человека и обезьяны чем в общий проязык Oak (оригинальное название Java) и LiveScript (оригинальное название JavaScript)

Первоначально язык JavaScript назывался LiveScript и предназначался как для программирования на стороне клиента, так и для программирования на стороне сервера (там он должен был называться LiveWire). На синтаксис оказали влияние языки Си и Java, и, поскольку Java в то время было модным словом, 4 декабря 1995 года LiveScript переименовали в JavaScript © Википедия.

UFO just landed and posted this here
UFO just landed and posted this here
Привык уже использовать camelCase — спасибо Zend Framework. Так что насчет популярности подчеркивания среди php-программистов я бы поспорил…
Есть хорошая поговорка: De gustibus non est disputandum
Но нет-нет — да и появится очередная околохоливарная статься на Хабре…
Для незнающих латынь можно перевод плз? :)

Все началось с вопроса
о вкусах не спорят
Для незнающих латынь: о вкусах не спорят :)
Quidquid latine dictum sit, altum sonatur.

Для незнающих латынь: «всё, что сказано на латыни, звучит внушительно».
>как писать правильнее GenerateHTMLFromText или GenerateHtmlFromText, в итоге остановились на втором варианте, но чувство нерешенной проблемы все равно немного грызет.

Вы выбрали вариант, который рекомендует МС: msdn.microsoft.com/en-us/library/ms229043.aspx
Для аббревиатур от 3х символов они рекомендуют писать только одну заглавную букву: Html, Olap, Ssrs, но DB, DX, MX и т.д.
Фиг знает. В Java есть классы HtmlURLConnection, но HTMLEditorKit. Есть ZipInputStream, но и GZIPInputStream. Есть как XMLReader, так и XmlReader. Короче, надо писать так, чтобы было понятно — остальное IDE исправит.

Кстати, по правилам как назвать переменную urlConnection или uRLConnection? )))
Ну вы же знаете правильный ответ:)
символом нижнего подчеркивания (_)
А какое ещё подчёркивание бывает?
UFO just landed and posted this here
Возможно было подчеркивание, одно единственное, а потом появилось «надчеркивание». Но звучало неудобно, поэтому стало два подчеркивания — нижнее и верхнее)))

ptrue.livejournal.com/414510.html?thread=4433198#t4433198

У темы другая точка зрения на эту проблему:
tema.livejournal.com/151813.html?page=2

В целом термин «нижнее подчеркивание», который обозначает символ _ (против термина «подчеркивание», который обозначает действие) достаточно распространен и я считаю что его вполне можно использовать
Да ладно вам. А «мороженное» тоже по-вашему действие определяет.

Давайте проведём эксперимент. Я говорю: «в именах используется подчёркивание». И что? Вы в растерянности? Не знаете какое слово я использовал и что оно означает?
Также данный стандарт используется в названиях стандартных функций PHP, и является очень популярным среди PHP-программистов
Брехня. В PHP нет единого стиля (html_entity_decode, но htmlSpecialChars, прочем часто последнее пишут в одну строку), за что его и ругают.
верблюжья нотация является стандартом в языке Java и его младшей сестре JavaScript
Java и JavaScript не родственники, а однофамильцы. «JavaScript» — коммерческое название, его придумали маркетологи, тогда как раз Java популярность набирала дикими темпами.
в случае с нижним подчеркиванием и знаком «минус» выражение с первого взгляда вообще можно принять за одну переменную, однако подсветка синтаксиса может решить эту проблему.
Нормальные люди решают эту проблему форматированием кода. Окружите минус пробелами и вы уже не сможете прочитать ту строку как одну переменную.
Ёпрст, сколько флейма. Используете рекомендации и стандарты, которые определены для вашего языка. Для шарпа, например, целый документ есть, в котором говорится, что и как нужно именовать и какой стиль использовать.
Camel Case является противоположностью английского, русского и многих других языков: в обычных языках предложение начинается с большой буквы, а все остальные слова пишутся строчными
Дорогой Искандер Гиниятуллин, в России принято писать с большой буквы не только слова в начале предложения.
подозреваю, что автор намекал на немецкий, в котором существительные пишутся с большой буквы (в дополнение к именам, названиям стран, рек, озер и т.д.)
использую в основном under_score, однако в циклах, где нужен счетчик — до сих пор использую i, j, k и им подобное.
однако в циклах, где нужен счетчик — до сих пор использую i, j, k и им подобное
А что, дают и другие рекомендации?
Не знаю, просто в чужом коде часто вижу в роли счетчиков переменные типа: count_…
Я за camelCase, он на целый байт меньше!
Хм. А я вот раньше тоже начинал переменную с префикса, указывающего на тип (string sUserName). Тут смысл был скорее (для меня) в том, чтобы набрав первую букву сразу отфильтровать выпадающий список по типу.
Однако потом как-то прочитал статью, что при нормальном именовании переменных без подобных «пояснений» должно все быть ясно. И на самом деле согласился. Глядя на свой код спустя… я обычно не испытываю проблем с пониманием. Даже вот не знаю. Скажет кто чего?
Найдите статью Джоэля Спольски о венгерской нотации. Варианты вроде sUserName — это профанация, на самом деле.
Сам не использую, стараюсь именовать так, чтобы было ясно, что там лежит.
Но это Джоэль Спольски так считает.
Для переменных, типов венгерская нотация может и не подходит,
но мне удобно ее использовать для объектов интерфейса.

frmLogin, edtUserName, edtPassword, cmbHostName…

UserName := frmLogin.edtUserName.Text;

Вроде читабельно, можно быстро увидеть/разделить интерфейс от логики.

И это только имхо. И да, это Delphi :) Для других языков, как утверждает Джоэль Спольски, это не всегда подходит.
Я считаю, что Спольски можно доверять. Он аргументированно рассказывает:)

Ну, для объектов интерфейса — да, может быть. Но я в таких случаях предпочитаю положить все такие объекты в запись (по терминологии Pascal), а потом обращаться как-то так: passwd = form.passwd.value (это JS).
Выше уже приводили ссылки, и если внимательно прочитать, что Джоэль пишет, то можно заметить: Джоэль за Венгерский для приложении и против Системного Венгерского.
Я же привожу пример, когда даже Системный Венгерский, имхо, вполне не плохо смотрится.
Тип переменной — это не венгерская нотация. Плохо ли это? Да.
Содержимое переменной — это настоящая венгерская нотация. Хорошо ли это? Может быть.
Вы абсолютно правы используя префиксы.
Иногда имени переменной не достаточно.
Одна сущность вполне может быть представлена в нескольких типах.
Пример:
string sPhoneNumber = editboxPhoneNumber.Text;
int nPhoneNumber = int.TryParse(sPhoneNumber);
Точно! Именно у него я вычитал подобное…
Довольно странно, что в переводе (и в оригинале) фигурирует, цитирую:
Очевидно, что camel case читается лучше: в случае с нижним подчеркиванием и знаком «минус» выражение с первого взгляда [...]

Знак минус — есть именно знак минус.

Вы уж простите, но во всех языках используется дефис (черточка). Несмотря на то, что его и называют от природы hyphen-minus (0x2D), в переводе лучше использовать термин «дефис».
UFO just landed and posted this here
исправил на оператор минус.

дефис тут все-таки не очень подходит
в Objective-c всегда использовал camelCase
и сейчас under_score выглядит как вырви глаз 0_о
хотя когда писал на php вроде пользовался и не жаловался)
все таки о вкусах не спорят
есть еще BLONDYSTYLE в SQL можно встретить

и

______leading_underscore_style
UFO just landed and posted this here
Лично я отдаю предпочтение уже существующим стилевым стандартам:
Исключением является программирование под WinAPI, тут я использую Windows Coding Style Conventions.

В последнее время искал офоциальный style guide для C#, но так и не нашёл того, что хотел, в той форме, что хотел, поэтому использую свой собственный набор правил.

Использование подобных стилевых спецификаций создаёт ощущение некой гармонии при написании когда. Просто следуешь наиболее авторитетным стандартам, и не нужно ничего придумывать. А когда создаёшь свой собственный стиль — это немного отвлекает от реализации задачи.
Хороший материал, спасибо. Единственное, что они упустили, — нет примеров if со сложным condition. Например, верно ли так:

if (false == _processing
    && true == _finished)    // 4 spaces
{
    // ...
}

Как тут стоит записывать: по условию на строку, по длине строки (кстати, об этом ничего не сказано) или как-то ещё?
Ну, конкретно тут, я думаю:
if ( _finished && !_processing )
{
//…
}

В более сложных случаях я объявляю перед if пару промежуточных переменных, в которых вычисляю части сложного условия, а выражение в if все-равно свожу к двум-трем переменным. У такого подхода целая куча плюсов:
1. Легче читать код, когда видишь названия этих промежуточных переменных
2. Легче отлаживать — можно просмотреть значения этих переменных
3. Короткие выражения в блоке if — более понятно, что происходит.

Суть этого подхода я вычитал в «Совершенном коде» Макконела.
Венгерская нотация — fffuuu :)

А так CamelCase самое оно, все методы и классы с заглавной буквы в C#, и методы с маленькой буквы — в JavaScript. Все переменные всегда с маленькой, и для приватных переменных — символ подчеркивания в самом начале.

Тем не менее названия юнит-тестов называются, скажем так, гибридным образом, например:
«ActionInvoker_ShouldBe_AbleToBe_Created()»
или
" ActionInvoker_Should_Set_The_ActionReturnValue_As_ViewModel_When_It_IsObject_And_Not_An_ActionResult()"
Предлагаю также обсудить, едят ли курицу руками.
Я ем только вилкой и ножиком, чем вызываю бешеное негодование всех родственников. о_0
Хех, заюавно, я обычно тоже, но в итоге вызываю негодование у себя самого, после чего забиваю, и беру руками :)
Ну, у меня почему-то они рассуждают так: «Раз человек не хочет брать курицу руками, значит у него не все в порядке с головой и его надо срочно сдать в дурку на лечение».

А меня просто бесит брать жирную куру руками — терпеть это не могу. Цивильно и культурно ем вилкой и ножиком. Но их это раздражает.
Ну вот потому, хоть у меня это никого не раздражает, и предпочитаю курицу без костей.
Ну и заодно, что было раньше — яйцо или курица, чего уж там.
Хо-хо, не все так просто. Лично для себя выяснил что курицу удобней всего есть двумя вилками.
Меня лично раздражает именование переменных типа event5 — ничего не понятно из названия.
С другой стороны, верблюжья нотация является стандартом в языке Java и его младшей сестре JavaScript, хотя ее можно встретить также и в других местах. <\i>

Почему с другой? Параграф выше гласит, что доминирующим стандартом для C/C++ (я бы еще добавил Objective-C) является верблюд и потом пишите что с «другой стороны». По тексту это значит что JAVA должен отличаться, но это не так. Более того в Java очень много взято из C++ и Delphi (источник Bruce Eckel «Thinking in Java»). Так что не удивительно что в нем приняты такие нотации.

В общем текст ни о чем, а лично мое мнение, что нижнее подчергивание и приватные переменные и функции, который начинаются с нижнего подчеркивания — это все архаизмы, которые каким-то образом до сих пор живы.
Видимо мы видим разные параграфы выше, потому что в том, что вижу я, написано что в С изначально использовался underscore и поэтому при разработке С++ он был принят за стандарт наименования функций в библиотеках STL, Boost.
camelCase — верблюжий чемодан =)))
«Верблюжий случай» тоже звучит ;)
Если бы IDE научились смягчать подчеркивание в именах:



Хотя, к сожалению, часто приходится иметь дело с уже готовым стилем, где вводить свои порядки как-то неаккуратненько.
Попробуйте использовать VIM/EMACS, там слава богу задать такие стиливые особенности — минутное дело. Кстате, во многих IDE с поддержкой тем тоже это есть, правда не так очевидно и «просто» как в случае с vim/emacs.

P.S. спасибо за идею =)
лично я юзаю и первый, и второй способ. Утилитки с общим API у меня пишутся на С++, причём общее API используется в виде классов, а само действие утилиты больше написано в процедурном стиле. Соответственно, классовая часть Кэмелом, процедурная — с подчёркиванием. Трудность чтения названия на тамошних размерах пока не пугает, но зато сам себе в голове отделяю вечное (общий API) от бренного (подробности его использования в данном конкретном смысле)
Следующий пост про расстановку скобок? Какие стандарты в проекте определены так и надо писать.
Старый какой пост. Пора оживить тему, голосование устроить :)
Я бы ещё добавил, что андерскоры удлиняют длину строки. Что усложняет ситуацию, если на эту самую длину в соглашениях установлен лимит.
А я не парюсь, в большинстве случаев нотацию диктует используемый фреймворк. И лучше ей следовать, не то зоопарк гарантирован.
Юзаю везде under_score, так повелось еще с институтского с++, но когда изучал Livestreet оценил венгерскую нотацию с кэмел кейзом — очень удобно разбираться в чужом коде с ней.
Мде… Разве не логично писать так, как диктуют стайлгайды к конкретному языку?..
в camelCase раздражает, когда в имени переменной есть предлог или аббревиатура. как в таком случае поступать? например как написать «RGB to color» или «is GPS connected» и в таком духе?
Предположу что можно использовать модули.

RGB::to_color()
GPS::is_connected?()

на самом деле очень удобно, правда такая ситуация в руби, как с другими языками — не знаю.
В руби:

обычные переменные: my_super_var
контанты и имена классов/модулей: MySuperClass, MySuperConst
Неправда, константы в руби пишутся так: MY_SUPER_CONST
Что интересно, переменные обязательно должны начинаться с маленькой, а константы/классы — с большой буквы, иначе ошибка.
Добавлю и от себя пять копеек. Одно из «преимуществ» camelCase — более короткие идентификаторы. Так как мы по возможности стараемся укладывать код в 80 символов (не потому что монитор маленький, а потому что diff, 3-way merge и консоль), то сокращение длины идентификаторов играет немаловажную роль, увы. Плюс camelCase позволяет в сильно меньшее количество символов приклеивать к идентификаторам тип. Венгерская нотация, конечно, зло, но для ряда случаев все же используется:

nItemId = 42 # идетификатор с "n" короче.
s_item_id = "{42-000-000}" # идентификатор в "s" длиннее за счет подчеркиваний.

nItemId = oActiveUsers.Find( sUserName, eUserGender, sUserCompany )
# Чем больше составных идентификаторов в satement - тем строки длиннее.
# Конечно, 5-10 % длины строки это не так уж много - но в ряде случаев не так уж и мало :). 
n_item_id = o_active_users.find( s_name, e_user_gender, s_user_company )

А помоему пофиг как выглядит кодинг-стандарт — главное что б он был и его придерживались все участники проекта.
>только в качестве первого слова использую сокращенный тип переменной (bProductActive, iProductsCount, sUserName)

Я использую префиксы 'm' для полей класса и 'k' для констант.
в Ruby например от первой буквы зависит будет ли у вас это константа (класс) или переменная, CONST = 6 или const = 6; const =+ 1; можно
Классы так же по соглашению именуются NewsController, но методы и переменные under score hello_kitty

Этого же я придерживаюсь в PHP (CodeIgniter framework) и всегда против Camel Case так как в речи у нас всегда между словами есть пробелы (ну может кроме в тайской речи)
Использование camelCase в Eclipse дает несравненое преимущество по сравнению с under_score в плане автодополнения. Например, если у вас есть класс MyAwesomeMegaClass, то достаточно будет набрать в эдиторе MAMC, нажать ctrl+space и IDE автоматически найдет все совпадения названий по camelCase и скорее всего единственным совпадением будет имя вашего класса. То же самое работает для переменных и методов, что очень сильно ускоряет кодописание.
ну да, он ищет по большим буквам, что мешает искать не по

M A M C

а по

m _a _m _c

?
как минимум то, что это не поддерживается эклипсом?
по крайней мере голый эклипс с подчеркиваниями не работает.
Глупо раздувать холивар из ничего. У каждого приличного языка есть правила именования.
Sign up to leave a comment.

Articles