Сохранен 58
https://2ch.hk/pr/res/2394210.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

БУЛЕВЫ ПЕРЕМЕННЫЕ - ULTIMATE

 Аноним 02/07/22 Суб 12:50:54 #1 №2394210 
image.png
image.png
image.png
image.png
Кодерачеры, как всё-таки именовать булевы переменные? Чем вы руководствуетесь? Хочется придерживаться каких-то правил и дать самому себе объяснение, почему здесь я использовал префикс Is, а здесь не использовал, и тому подобное.

Префикс Is
Enabled vs IsEnabled
OriginAllowed vs IsOriginAllowed
AnyUserActive vs IsAnyUserActive
Success vs IsSuccess
SettingsAvailable vs IsSettingsAvailable

Кастомные булевы названия
AllowUserResizing | WasMoved | HasBeenCopied | NeedsDisposing | ShouldClose | CompleteSchedule | SuffixSent | ThrowOnCancelled
Аноним 02/07/22 Суб 13:22:06 #2 №2394241 
>>2394215
Распиши, чем ты руководствуешься в своём ЯП.
Аноним 02/07/22 Суб 13:46:28 #3 №2394253 
b_flag4
Аноним 02/07/22 Суб 13:50:38 #4 №2394257 
image.png
>>2394253
> b_flag4
Аноним 02/07/22 Суб 14:35:06 #5 №2394289 
>>2394210 (OP)
>Префикс Is
Да
Аноним 02/07/22 Суб 15:12:39 #6 №2394317 
image
>>2394210 (OP)
Руководствуюсь чувством прекрасного и эстетикой. Программирование - это искусство. Можно тысячью способов сделать работающий код. Но код должен быть ещё и красивым, и здесь лишь художники способны на это.
Раньше я любил b или b_. Это хороший вариант, его ни в чем нельзя упрекнуть, кроме того, что он слишком далёк от читабельности как фрагмента естественного языка.
Поэтому я перешел на Is. Это было бы отличным решением. Но английский язык не может быть покрыт одним лишь Is. Появляются Are, Has, Have, Was, Were, а иногда даже Must, хотя возможно нужен Should, а может быть HaveTo, что добавляет многозначности в языкоразнообразной команде.
Приставка Not - явно дурной вкус. Особенно когда будет IsNotPetookh == false. Мой встроенный в мозг логический анализатор ломается на таком.
Я бы использовал префикс b в именах переменных там наиболее строгий, однозначный, нейтральный к языку. Но что делать с именами свойств, методов? Выглядит слишком уродливо. Получается лучше всё же по-английски писать.
Аноним 02/07/22 Суб 15:43:54 #7 №2394341 
image.png
>>2394317
> Программирование - это искусство
У нас как-то с преподавателем философии завязался спор на эту тему. Я тоже ему сказал, что это искусство, а он - НЕТ ЭТА ОБЫЧНЫЙ ИНСТРУМЕНТ НИКАКОЕ НЕ ИСКУСТВО.

> Но английский язык не может быть покрыт одним лишь Is
Ещё распространены Can и Has.

> Но что делать с именами свойств, методов?
Если брать C#, где есть свойства и события, то в нём могут быть коллизии между именами. Допустим, событие Authenticated, которое срабатывает после аутентификации аккаунта. И свойство, которое показывает, аутентифицирован ли аккаунт: bool Authenticated. Если мы не добавим Is к названию, то возникает коллизия. Поэтому имеет смысл добавлять Is к полям, которые описывают текущее состояние объекта.

Мне ещё понравился в качестве примера вот этот класс микрософтов с его именованием булевых свойств:
https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.uielement3d.inputbindings?view=windowsdesktop-6.0

Но в целом, даже микрософты не пришли к какому-то единому стандарту именования булевых переменных.
Аноним 02/07/22 Суб 17:45:29 #8 №2394448 
image.png
image.png
Интересное обсуждение булевых параметров методов/функций
https://softwareengineering.stackexchange.com/questions/439592/naming-convention-for-boolean-arguments

A field/property represents a state.

A method argument is a command.


Для полей мы используем префиксы в названиях, чтобы обозначить состояние. А для параметров методов - нет.

Но, опять же, допустим нужен ли здесь Is? По-моему он будет лишним:
anyPointersNull | allPointersNull
Может, если это поле класса, тогда стоит Is использовать. А если это локальная переменная, тогда не нужно.
Аноним 02/07/22 Суб 18:14:39 #9 №2394476 
>>2394210 (OP)
Раз булеан отвечает на вопрос "да или нет?", то и такие переменные называю так, чтобы они это отражали. Для существительных, прилагательных и причастий обычно префикс is, для глаголов много чего, чаще всего can, но чаще стараюсь выразить глаголы через существительные и прилагательные и пишу is.
Аноним 03/07/22 Вск 17:41:54 #10 №2395258 
image.png
Аноним 04/07/22 Пнд 00:57:49 #11 №2395689 
>>2394241
Ну, во-первых, стандартным правилом скоупа - если твоя переменная только в блоке на пять строк, то можешь её хоть жопой назвать. Если видна из разных модулей приложения - то желательно несколько слов потратить.

Если ты пишешь на статикодрисне без выведения типов - то требований опять же меньше (bool enabled вроде и так понятно), если на динамикодрисне - уже немного подумать надо, но если по контексту понятно, что это буль (например, параметр метода, а дефолтное значение у него буль) - то опять же не сильно много вопросов будет.

В руби, например, вообще префиксы типа is/has не одобряются. Названия методов, которые должны возвращать буль, по конвеншонам заканчиваются вопросительным знаком. Ср.:

user_banned = true if user.banned?
ueer_is_banned = true if user.is_banned

Но для локальной переменной можно при желании. В общем, хуй знает, как тебе нормально сформулировать. Это как у водителя спрашивать, как правильно сцепление отпускать на разных машинах - он и не думает об этом никогда, тут на каждой конкретной смотреть надо.
Аноним 04/07/22 Пнд 01:48:09 #12 №2395703 
>>2394210 (OP)
Богоподобной венгеркой конечно же bVarName
Аноним 04/07/22 Пнд 12:16:27 #13 №2395888 
>>2395703
А если будет вот так:
class Person {
public string FirstName;
public string LastName;
public bool IsDvacher;
public bool bDvacher;
public bool BDvacher;
public bool B_Dvacher;
public bool Dvacher;
public bool YavliaetsaDvacherom;
}
Как лучше?
Аноним 04/07/22 Пнд 12:33:46 #14 №2395893 
>>2395888
Если использовать переменные, то я бы так написал:

class CPerson {
public:
LPCSTR szFirstName;
LPCSTR szLastName;
BOOL bDvacher;
};
Аноним 04/07/22 Пнд 13:22:32 #15 №2395908 
>>2395893
А если тебе нужно хранить выбранный возраст и булеву переменную, которая показывает, были ли вообще выбран возраст?

SelectedAge
Аноним 04/07/22 Пнд 13:33:24 #16 №2395914 
>>2395908
32-й бит будет хранить булеву переменную. А возраст отрицательным быть не может.
Аноним 04/07/22 Пнд 13:34:43 #17 №2395915 
image.png
>>2395914
Аноним 04/07/22 Пнд 13:52:12 #18 №2395929 
iAge -1 не выбран, x >= 0 выбран.
Аноним 05/07/22 Втр 08:24:50 #19 №2396523 
>>2394241
В сях префикс is зарезервирован для библиотеки. Поэтому испольщую постфикс р из лиспа или никакого. И так видно, что она bool.
Аноним 05/07/22 Втр 10:47:44 #20 №2396629 
Короче, нет никаких правил. Посмотрел проекты на C#. Игровой движок моногейм, проекты от микрософт дотнет, библиотеки от фейсбук и гугл. Нигде нет единых правил именования булевых переменных. Даже в рамках одного проекта можно встретить bool IsDisposed и bool Disposed.
Аноним 05/07/22 Втр 11:22:55 #21 №2396666 
Всё-таки быть программистом и перфекционистом одновременно такая боль.
Аноним 05/07/22 Втр 13:55:53 #22 №2396850 
image.png
Даже в рамках одного класса программист не смог определиться: IsMuted и ScrubbingEnabled. По-хорошему нужно было тогда написать IsScrubbingEnabled или Muted
Аноним 05/07/22 Втр 20:26:32 #23 №2397230 
>>2396666
Это так. То и дело переименовываю переменные, превращаю циклы for в do while и переформатирую комментарии. А кто-то хуяк-хуяк и написал nginx.
Аноним 05/07/22 Втр 23:13:26 #24 №2397326 
image.png
>>2397230
Переменные ещё ладно. А частенько хочется архитектуру переделать. Вот тогда начинается совсем жесть. Я на такие вещи много времени убивал. Это ужас, это пытка разума.

Помню посмотрел код Майнкрафта. Там всё так красиво было. Идеально использованы паттерны проектирования. И ведь разработчик не тратил на написание архитектуры годы. Он просто делал игру.
Аноним 06/07/22 Срд 00:22:39 #25 №2397388 
>>2397326
> Помню посмотрел код Майнкрафта. Там всё так красиво было. Идеально использованы паттерны проектирования.
А потом посмотришь на тот же код, и увидишь шаблонную забагованную хренотень.
Аноним 07/07/22 Чтв 12:47:29 #26 №2398559 
В общем, я выработал простое правило: в названии булевой переменной должен быть глагол. С таким подходом Is иногда будет казаться избыточным, но лучше следовать единому правилу. Так самому будет проще и такое проще донести до другого программиста.

Приведу несколько примеров:
CanRotate| HasItem | ShouldUpdate
IsAuthenticated | IsFirstTimeLogin | IsMusicEnabled
IgnoreDefaultValues | AllowUserResizing | SupportsFlush
PreferHostingUrls | TrackAllCaptures | WriteInt64sAsStrings
Аноним 07/07/22 Чтв 18:59:15 #27 №2398910 
0491920052430.jpg
>>2398559
OpenFile
Аноним 07/07/22 Чтв 19:11:42 #28 №2398927 
16334318977120.jpg
>>2398910
Аноним 07/07/22 Чтв 19:27:57 #29 №2398943 
>>2394210 (OP)
> булевы переменные

зачем?
Аноним 07/07/22 Чтв 20:25:27 #30 №2398986 
>>2398943
> зачем?
Что зачем?
Аноним 07/07/22 Чтв 20:51:31 #31 №2399006 
>>2395908
Nullable возраст храню без лишней дичи.
Аноним 07/07/22 Чтв 21:12:59 #32 №2399021 
image.png
??????????????????

Иногда поражаюсь коду микрософтов. У них там две головы одновременно код пишут что ли.
Аноним 08/07/22 Птн 13:53:08 #33 №2399582 
image.png
Понравилось, как именуют свойства и методы в Apple на Object-C, которые возвращают Bool. Они явно следуют своему Naming Convention:
- Если нет глагола, то указывается Is
- Если есть глагол, то он пишется с s в конце, если переменная указывает состояние
- Некоторые глаголы пишутся без s в конце, если это настройки или параметры метода (ты пишешь как бы в приказном формате Сделай То, Сделай Это)
- Есть исключения. Для параметров метода Is не используется. Просто передаётся утвердительная форма, вроде "animated" и "enabled".

isBordered | isEditable | isTracking | isTextDragActive | isDisplayingRepresentativeItem | isCustomizing | isFullScreen | universalLinksOnly | hasImages | canBecomeFocused

importsGraphics | drawsBackground | acceptsFirstResponder | usesFontLeading | showsMenuAsPrimaryAction | restoresFocusAfterTransition | enablesMarqueeWhenAncestorFocused | applicationSupportsShakeToEdit

useFastSameViewOperations | openInPlace
Аноним 08/07/22 Птн 17:43:55 #34 №2399894 
>>2399006
Синтаксический сахар вокруг возраста и булевой переменной.
Аноним 26/07/22 Втр 14:51:04 #35 №2416884 
1514870222830.mp4
Аноним 27/07/22 Срд 15:08:43 #36 №2417737 
>>2394210 (OP)
Некогда не пишу эти ваши is, has.
Просто есть состояние 0 и 1. Все. Что еще надо? Чем отличается FileOpened от isFileOpened? Одним лишним словом, что часто приводит к инверсной логике и непонятности, что хотел сказать автор.
if(fileOpened) и достаточно, сам if уже этот is подразумевает.
Аноним 27/07/22 Срд 15:12:17 #37 №2417742 
>>2396666
Быть перфекционистом - это вред и не только для себя и для окружающих.
sage[mailto:sage] Аноним 27/07/22 Срд 22:22:31 #38 №2418070 
>>2416884
Тред настолько унылый, что приходятся бампять в тематике, блять.
Аноним 28/07/22 Чтв 11:56:32 #39 №2418325 
>>2417742
> это вред и не только для себя и для окружающих
В чём вред для окружающих?
Аноним 28/07/22 Чтв 12:15:17 #40 №2418350 
>>2417737
> Чем отличается FileOpened от isFileOpened?
В C# можно объявить события в классе. Вот "FileOpened" был бы событием, которое срабатывает после того, как открылся файл. Ещё может быть неоднозначная трактовка между OpenedFile и FileOpened.

Короче говоря, таким образом мы убираем все неоднозначности. Программист, увидев такое название переменной, будет 100% знать, что она хранит, ещё до встречи с первым IF, где её используют.
Аноним 28/07/22 Чтв 16:45:09 #41 №2418533 
>>2418325
Если ты приготовил фикс/написал письмо и ходишь вокруг монитора без толку: посмотришь стоя, то сидя, то издалека, то вверх ногами, перечитаешь, тратя на это по пол часа, потом подумаешь и перепишешь, удалишь лишнюю запятую, ещё перечитаешь ещё перечитаешь, то это называется суходрочка, хотя некоторые называют эти ритуалы перфекционизмом.
А все ждут пока ты натанцуешься.
Человек должен знать меру идиальному.
Аноним 29/07/22 Птн 07:49:05 #42 №2418876 
1658992609680850.gif
Спрошу здесь тоже.

Является ли в проектах серьёзных компаний обязательным использование только гетеров\сетеров вместо прямого обращения к данным?

С одной стороны использовать везде get()\set() - красиво, с другой - занимает больше размер текста программы и больше вызовов функций в коде.

Вообще - какая политика к сетерам\гетерам vs обращение к данным в проектах серьёзных компаний?
Аноним 29/07/22 Птн 10:43:55 #43 №2418931 
>>2418876
> Является ли в проектах серьёзных компаний обязательным использование только гетеров\сетеров вместо прямого обращения к данным?
Да.
Аноним 29/07/22 Птн 22:59:14 #44 №2419511 
>>2394210 (OP)
Вообще не парюсь, всё зависит от контекста.
Вся ваша концепция чистого кода - хуйня, у меня есть эстетическое представление о коде, и думаю, у каждого с опытом появляется.
Аноним 29/07/22 Птн 23:00:44 #45 №2419514 
>>2418876
Посмотри видер: "Объектно-Ориентированное враньё".
Вообще нужно без них обходиться.
Аноним 30/07/22 Суб 11:57:45 #46 №2419753 
>>2394210 (OP)
>2 пик
IsEnabled не равно !isDisabled, если состояний больше 2.
>3 пик
Для его старой башки может и тяжело читается.
Аноним 30/07/22 Суб 15:42:18 #47 №2420046 
1573925634255.png
>>2419511
> у меня есть эстетическое представление о коде
Аноним 30/07/22 Суб 16:07:46 #48 №2420065 
>>2394210 (OP)
Пишу на лиспах, ссу в рот жаба- и питоноплебсу, потому что называю предикаты как
enabled?
origin-allowed?
any-user-active?
success?
settings-available?
и т.д.
Аноним 30/07/22 Суб 17:48:14 #49 №2420153 
1563501488021.png
>>2420065
Красава.
Аноним 31/07/22 Вск 06:06:13 #50 №2420564 
>>2420065
База.
Аноним 31/07/22 Вск 09:51:13 #51 №2420605 
Называю все переменные и функции на чистом литературном русском языке. Например являетсяФайлОткрытым, являетсяБалансНеСведенным, являетсяОтветУспехом. Пишу на питоне, если что.
Аноним 31/07/22 Вск 13:25:05 #52 №2420706 
>>2420605
Ну, это не база. Это уже шизофрения.
Аноним 31/07/22 Вск 19:38:09 #53 №2421064 
>>2418876
>Является ли в проектах серьёзных компаний обязательным использование только гетеров\сетеров вместо прямого обращения к данным?
Да.
Другой вопрос, насколько это обосновано.
Аноним 31/07/22 Вск 21:20:42 #54 №2421200 
>>2394210 (OP)
> const prefixVisible;
> const visiblePrefix;

> расположение имени изменяемого свойства (в данном случае: visible) до или после целевого объекта (в данном случае: prefix) в имени переменной не имеет никакого значения и зависит от Ваших личных предпочтений - оба синтаксических варианта отлично читаются и однозначно трактуются сторонними разработчиками.

ВИДИШЬ ПЕРЕМЕННУЮ visiblePrefix
@
ХОЧЕШЬ ПОЛУЧИТЬ ОТТУДА ВИДИМЫЙ ПРЕФИКС
@
ВМЕСТО ВИДИМОГО ПРЕФИКСА ТАМ ЛЕЖИТ TRUE ИЛИ FALSE
Аноним 31/07/22 Вск 21:31:38 #55 №2421216 
>>2421200
Вот и я о том же. Например, AgeSelected и SelectedAge неоднозначны. А если добавить Is, тогда все ок: IsAgeSelected и SelectedAge
Аноним 01/08/22 Пнд 09:24:21 #56 №2421514 
>>2418931
>>2419514
>>2421064

Благодарю! Я посмотрел видео про ООП враньё.
Инкапсюляция, я так понимаю, начиная с некоторого уровня сложности кода вообще невозможна полностью, есть только степень инкапсюляции - больше или меньше, но никогда не 100%. Поэтому вся эта возня со скрытием данных просто ещё один небольшой шажок сделать свой код чуть более идеальным, но полностью идеальным он никогда не будет.
Аноним 01/08/22 Пнд 12:02:29 #57 №2421577 
>>2421514
При помощи инкапсуляции ты показываешь другим программистам как работать с твоим классом. Если твой класс будет голым и открытым всему миру, как потасканная шлюха, то и отношение к нему со стороны программистом будет соответствующим.
Аноним 18/08/22 Чтв 13:55:04 #58 №2438157 
>>2421577
А мне нравятся потасканные шлюхи: да, можно что-нибудь подцепить, но зато ей можно вертеть как угодно и больше возможностей удовлетворить свои хотелки. С целками же приходится плясать вокруг них и чаще удовлетворять себя самому. То самое выражение про свободу и безопасность.
Да, в бизнесе, где убытки, отчуждение и отстраненность такое не прокатит, но в своих проектах свобода очень приятна, особенно когда язык к ней располагает.
comments powered by Disqus

Отзывы и предложения