TransWikia.com

Использовать ли префиксы в именах переменных?

Stack Overflow на русском Asked by timur on August 30, 2021

Изучаю я WinApi и почти все структуры определяются так:

typedef struct tagWNDCLASSEXW {
    UINT        cbSize;
    UINT        style;
    WNDPROC     lpfnWndProc;
    int         cbClsExtra;
    int         cbWndExtra;
    HINSTANCE   hInstance;
    HICON       hIcon;
    HCURSOR     hCursor;
    HBRUSH      hbrBackground;
    LPCWSTR     lpszMenuName;
    LPCWSTR     lpszClassName;
    HICON       hIconSm;
} WNDCLASSEXW, *PWNDCLASSEXW, NEAR *NPWNDCLASSEXW, FAR *LPWNDCLASSEXW;

У всех названий полей есть префиксы cb, h, lpsz и т.д.

Используется ли сейчас данный стиль в обычном коде или он устарел?

3 Answers

Это называется венгерской нотацией. Её суть в том, чтобы добавлять префиксы в зависимости от типа или смысла какого-либо имени (переменной/поля/типа/…).

Плюсы:

  1. В имени отображается тип/смысл именуемого, что при неявном апкасте всего и вся можно сложить не то с не тем, например, указатель с символом.
  2. Является контейнером с универсальными и устоявшимися сокращениями

Минусы:

  1. Ухудшает читаемость (субъективно)
  2. Современные текстовые редакторы нативно отображают тип именуемого и могут очень быстро перемещаться по коду, что ставит под сомнение 1-й плюс
  3. Есть альтернатива: добавление ключевых слов, по типу is, can, index, -s, и т. д. В отличие от префиксов они достаточно органично вписываются в имя (SucceededIsSucceeded, NumberNumbers (массив)).

Венгерская нотация достаточно субъективна, чтобы сказать, что её необходимость определяете конкретно вы/ваша команда.


Лично я не использую венгерскую нотацию – использую альтернативу из минуса #3: мне этого вполне хватает. Думаю, можно назвать переменную нормально, чтобы её понимали все и без всяких префиксов (я согласен с актуальностью минуса #1). Т. е. я согласен со всеми (указанными выше) минусами венгерской нотации.


В WinAPI она используется, по причине неактуальности минуса #2: WinAPI писалось давно, и тогда не было современных текстовых редакторов – венгерская нотация стала для разработчиков из Microsoft панацеей. Можно заметить, что в современных разработках от Microsoft венгерская нотация (за редким исключением) не используется. Самый яркий пример, это C# и .NET: минус #2 актуален, а плюс #1 не имеет смысла. Следовательно, если уже говорить о венгерской нотации, то вопрос там (C#, .NET) стоит 1: использовать ли альтернативу из минуса #3 (нужно заметить, что у Microsoft по этому поводу однозначного мнения нет (IAsyncResult.IsCompleted, Socket.Connected)).

Correct answer by return on August 30, 2021

У всех по разному, но я расскажу как у нас.

  1. Запрещается менять стиль написания программы.
  2. Если используется Венгерская нотация то она такой и останется.
  3. Код пишется так что не определишь чей либо почерк. Имена переменных, классов, модулей ... придерживаютя стиля заложенного в самом начале. Счастье если оно было заложено грамотно в самом начале.

Answered by Aziz Umarov on August 30, 2021

Ответ от Harry:

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

Answered by jokerbot on August 30, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP