forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Болтовня (http://forum.boolean.name/forumdisplay.php?f=25)
-   -   Именование методов/функций/переменных (http://forum.boolean.name/showthread.php?t=16420)

Randomize 01.03.2012 18:42

Именование методов/функций/переменных
 
Продолжая череду тем о стилях написания кода.

Например есть функция которая совершает некий: "do something action"
Как вы запишете её название?

А ежели это не функция, а переменная?
Или имя класса?

Пожалуйста не разводите срачей. Это чистой воды вкусовщина и каждый пишет как ему нравится.
Опрос открытый!

den 01.03.2012 18:58

Ответ: Именование методов/функций/переменных
 
CamelCase - классы
lowerСase или lower_case_with_underscores - функции и переменные (тут от языка зависит)

Randomize 01.03.2012 19:16

Ответ: Именование методов/функций/переменных
 
Цитата:

Сообщение от Den (Сообщение 221161)
CamelCase - классы
lowerСase или lower_case_with_underscores - функции и переменные (тут от языка зависит)

В каком ЯП как?

den 01.03.2012 19:41

Ответ: Именование методов/функций/переменных
 
CamelCase - классы
функции и переменные:
java - lowerСase (как в стандарте)
python - lower_case_with_underscores (аналогично)
с/с++ - рекомендации в стандарте вроде как нет, так что по настроению =)

baton4ik 01.03.2012 22:49

Ответ: Именование методов/функций/переменных
 
CamelCase - функции и классы (но имена классы обычно начинаются с буквы, показывающей, что это класс - "T" в блитцмаксе, например).
Переменные - lower_case_with_underscores.

moka 01.03.2012 22:55

Ответ: Именование методов/функций/переменных
 
На заметку для всех кто отпишется тут: CamelCase, говорит о капитализации первых букв у каждого слова, и возможно исключая первую букву. camelCase и CamelCase, оба являются одним правилом: CamelCase. В то же время camelBack говорит о том что первая буква - маленькая.

Не завиимо от ЯП, использую всегда CamelCase с заглавной для классов, методов, enum'ов.
Для переменных всегда camelBack. Не использую никаких underscore вообще.

Mr_F_ 01.03.2012 22:56

Ответ: Именование методов/функций/переменных
 
Проголосовал за "doSomethingAction", но после этого вспомнил, что дело не совсем так.
Переменные, приватные/защищенные мемберы, классы - doSomethingAction.
Публичные методы - DoSomethingAction.

Иногда нарушаю это правило, если по-другому смотрится приятней (бывает, буква i и l рядом неприятно слипаются, например).

FireOwl 01.03.2012 23:45

Ответ: Именование методов/функций/переменных
 
В C#/Python писал классы DoSomething, а переменные doSomething, чтоб не путаться.
В Паскале и С/C++ пишу также, иногда do_something (для переменных или функций).

ABTOMAT 01.03.2012 23:46

Ответ: Именование методов/функций/переменных
 
Только doSomeAction.
На работе уже такая прадигма срослась. Отчасти, это связавно с тем, что Zend Framework написан в таком стиле и Magento eCommerce тоже, а мы на них изрядно 3 года налегали.
Хотя раньше делал DoSomeAction.

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

Платон Александрович 02.03.2012 05:17

Ответ: Именование методов/функций/переменных
 
Каждое слово с большой буквы, имена всегда осмысленные, в зависимости от сущности (переменная или функция\метод).
Вобщем почти полностью совпадает с этими рекомендациями
ЗЫ
недавно стал юзать пробелы между скобками, очень повышает читабельность кода.
еще симплификацию кода (раньше было нормой очень длинные функции, сейчас стараюсь все делить на маленькие осмысленные inline кусочки)
короче говоря постепенно избавляюсь от тяжелого и ограниченного блиц-бейсик стиля :)

pax 02.03.2012 07:29

Ответ: Именование методов/функций/переменных
 
Приватные переменнеые: _lowerCamelCase
Публичные переменные: lowerCamelCase
Классы/методы: UpperCamelCase

St_AnGer 02.03.2012 09:57

Ответ: Именование методов/функций/переменных
 
последнее время работаю на С++, поэтому в привычку вошло:
cCharacter - классы (начинаю с маленькой "c" лично для себя, что бы не путаться);
widthScreen - переменные классов;
tMass - переменные (начинаю с "t");
doSomeAction - функции.

как то так, на остальных ЯП стараюсь не отходить от этого стиля, чтобы максимально читабелен код был. Вроде из последних людей, кто смотрел код, жалоб на нечитабельность не было :)

FireOwl 02.03.2012 22:53

Ответ: Именование методов/функций/переменных
 
А я префиксами пользуюсь для классификации переменных.
Вроде:
Код:

iplayer, istone - картинки
mbattle, mcalmly - музыка
bgamestate, bstart - флаги

Чтобы не гадать потом не занято ли имя переменной другого типа.

pax 02.03.2012 22:55

Ответ: Именование методов/функций/переменных
 
Цитата:

Сообщение от FireOwl (Сообщение 221326)
А я префиксами пользуюсь для классификации переменных.
Вроде:
Код:

iplayer, istone - картинки
mbattle, mcalmly - музыка
bgamestate, bstart - флаги

Чтобы не гадать потом не занято ли имя переменной другого типа.

лучше playerImage, stoneImage и т.д. на много понятнее ;)

FireOwl 02.03.2012 22:57

Ответ: Именование методов/функций/переменных
 
Может быть, может быть. Но мне лень так длинно писать. Особенно, если переменная часто используется.

Ну и придется вспоминать писал я Image или может Img или Picture или еще как-нибудь. Ставил большую букву или разделял подчеркиванием и т.д.

pax 02.03.2012 23:16

Ответ: Именование методов/функций/переменных
 
А зачем помнить если придерживаться выбранных правил? Но это уже оффтоп)

FireOwl 02.03.2012 23:23

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

moka 02.03.2012 23:27

Ответ: Именование методов/функций/переменных
 
Apple выпустили новый продукт: iStone!

Hurrit 03.03.2012 00:09

Ответ: Именование методов/функций/переменных
 
Цитата:

Сообщение от FireOwl (Сообщение 221328)
Может быть, может быть. Но мне лень так длинно писать. Особенно, если переменная часто используется.

Ну и придется вспоминать писал я Image или может Img или Picture или еще как-нибудь. Ставил большую букву или разделял подчеркиванием и т.д.

установи нормальный IDE с автоокончанием

FireOwl 03.03.2012 00:14

Ответ: Именование методов/функций/переменных
 
Установил уже давно. Но моя система мне нравится больше. Код выглядит аккуратнее.

ffinder 03.03.2012 18:13

Ответ: Именование методов/функций/переменных
 
Цитата:

Сообщение от FireOwl (Сообщение 221326)
А я префиксами пользуюсь для классификации переменных.
Вроде:
Код:

iplayer, istone - картинки
mbattle, mcalmly - музыка
bgamestate, bstart - флаги

Чтобы не гадать потом не занято ли имя переменной другого типа.

мне одному заметна коллизия имен image и integer в твоей системе наименований?

FireOwl 03.03.2012 18:22

Ответ: Именование методов/функций/переменных
 
Интеджер - тип. Он и так будет прописан в том месте где переменная инициализируется. А префиксы обозначают смысловое разбиение переменных. Переменные типа integer могут играть совершенно разные роли в моем коде.
Код:

int xplayer, yplayer, cmain, c; // (x,y) - coordinates, c - counters

SBJoker 03.03.2012 18:45

Ответ: Именование методов/функций/переменных
 
в c++/Objective-C++ для хранения идентификаторов изображений iXors3D использую префиксы img, например imgAbout, imgWeapon.
Для звуков snd, sndHit, sndExplosion
Указатели на массивы обычно начинаю с ar, arUnits
Атласы - atls, atlsData
Классы по привычке с BlitzMAX'а начинаются с T, TUnit, TMap.

Методы DoSmfAction
поля, переменные - верблюжьей.

Nuprahtor 03.03.2012 18:53

Ответ: Именование методов/функций/переменных
 
Для своих игр в юнити выработал специальную структуру - папка с моими ресурсами - Data, в ней папки Scripts, Objects, Models, Sounds, Scenes, Shaders, Textures и т.п., каждый ресурс с префиксом - scene_ для сцен, snd_ для звуков, mdl_ - модели, txt_ - текстуры и т.п.
В коде использую те же префиксы, но иногда с различиями.
Функции все начинаю с большой буквы без пробелов между словами, каждое новое слово - с большой буквы.
В коде GUI использую gui_ для хранения изображений интерфейса.
С такой системой намного проще разрабатывать и использовать старые наработки. Некоторые скрипты кочуют с минимальными изменениями из проекта в проект.

johnk 04.03.2012 18:01

Ответ: Именование методов/функций/переменных
 
Randomize, ну что, определился?

Phantom 05.03.2012 08:46

Ответ: Именование методов/функций/переменных
 
В Java:

Class.doSomethingAction(somethingParameter);

В PHP:

Class::doSomethingAction($something_parameter);

Но с переменными в PHP не всегда так. Чаще всего если это поля класса, то синтаксис как в Java. А если локальные переменные, то разделяю "_". Но классы, методы и функции имяную всегда одинаково. Когда-то может переучусь вообще использовать "_". Потому что года три назад вообще чёрте что в коде у меня было.

Жека 05.03.2012 12:53

Ответ: Именование методов/функций/переменных
 
В блице для типов TTypeName.
В остальных для классов CClassName.

Для переменных:
константы: CONST_NAME = 1
"обычные" переменные: varNameHere
для булевых: bBoolVar
для картинок обычно: imgHealthBar
для массивов: иногда masImages, иногда просто множественное число: values

Для функций и методов прижился префикс fn: fnGetValue().

Стараюсь "группировать" функции так, что сначала идёт смысловое слово, к которому относится функция: fnUserSetName(), fnUserGetValue().

moka 05.03.2012 16:39

Ответ: Именование методов/функций/переменных
 
А зачем после T ещё и Type добавлять? Аналогично с C и Class..
fn - это имхо лишнее, учитывая что ты заглавные в начале нигде не юзаешь, получается коллизий не будет, можно смело избавляться от fn.

pax 05.03.2012 16:54

Ответ: Именование методов/функций/переменных
 
Цитата:

Сообщение от MoKa (Сообщение 221665)
А зачем после T ещё и Type добавлять?

Тут немного другое имелось ввиду...
Цитата:

Сообщение от Жека (Сообщение 221651)
T + TypeName

Т + ИмяТипа

den 05.03.2012 17:06

Ответ: Именование методов/функций/переменных
 
Кстати интересный вопрос про константы.
Я вот всегда объявляю их так: SOME_CONSTANT_NAME

Randomize 05.03.2012 17:40

Ответ: Именование методов/функций/переменных
 
Цитата:

Сообщение от johnk (Сообщение 221563)
Randomize, ну что, определился?

Глобальные статические функции:
DoSomeAction( args )

Класс:
SomeClassName

Метод класса вне зависимости от видимости:
doSomeClassAction( args )

Поле класса вне зависимости от видимости:
someClassField1

Константа:
SOME_INTEGER_CONSTANT = 100500


На счёт префиксов всё как и у джокера:

Изображение
imgSomePlayer
imgSomeBox

Entity
entCamera
entCamPivot

Mesh
mshBox
mshTube

Vector/List:
vectMyCollection
lstMyCollection

Жека 06.03.2012 07:59

Ответ: Именование методов/функций/переменных
 
Цитата:

Сообщение от MoKa (Сообщение 221665)
А зачем после T ещё и Type добавлять? Аналогично с C и Class..
fn - это имхо лишнее, учитывая что ты заглавные в начале нигде не юзаешь, получается коллизий не будет, можно смело избавляться от fn.

про Т рах правильно пояснил:)

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

однажды я разбирался в исходнике, в котором чел классы именовал с префиксом Ni - NiGame и т.п. :)

pax 06.03.2012 09:51

Ответ: Именование методов/функций/переменных
 
Цитата:

Сообщение от Жека (Сообщение 221770)
про Т рах правильно пояснил:)

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

moka 06.03.2012 14:30

Ответ: Именование методов/функций/переменных
 
Тем более кто-кто, так Java и C#, очень чётко повязаны на пространствах имён. В Java вообще инклудят по одному классу.

ABTOMAT 06.03.2012 17:51

Ответ: Именование методов/функций/переменных
 
Цитата:

Метод класса вне зависимости от видимости:
doSomeClassAction( args )
Зачем SomeClass ? Тавтология же:
myObject->doSomeClassAction( args ); // myObject и так уже класса SomeClass

когда можно было

myObject->doAction( args );

В остальном согласен

Randomize 06.03.2012 21:29

Ответ: Именование методов/функций/переменных
 
Цитата:

Сообщение от ABTOMAT (Сообщение 221801)
Зачем SomeClass ? Тавтология же:
myObject->doSomeClassAction( args ); // myObject и так уже класса SomeClass

когда можно было

myObject->doAction( args );

В остальном согласен

Это было всего лишь как пример многословности названия.


Часовой пояс GMT +4, время: 07:35.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot