Re: Стиль декларирования челенов класса
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 25.01.06 08:21
Оценка: :)
Здравствуйте, FurJ,

А я на (C#):
  • Переменные члены класса (в т.ч. статические) называю маленькими буквами: channel, handler, recognizer;
  • Локальные переменные (с маленькой областью видимости) обозначаю 1-2 буквами: a, b, c, s, h, i, j, n, rd, wr...;
  • Типы, процедуры, свойства, элементы enum-ов начинаю с большой буквы (а интерфейсы с I): Channel, Handler, IReader, IWriter,...;
  • Константы пишу заглавными буквами: MIN_LENGTH

    При обращении к любым идентификаторам пишу их полное имя:
  • this.*** — обращение к членам;
  • MyClass.*** — обращение к статическим членам;
  • Namespace1.Namespace2.Namespace3.SomeClass1.*** — обращение ко всему, что за пределами данного класса.

    Короче, получается так, что глядя даже на небольшой фрагмент текста (заранее не зная, что обозначают идентификаторы) — становится понятно что написано. Всегда!

    Плюсовики видевшие мои тексты сразу спрашивали почему у меня везде написано: this.***, this.***, this.***? Неужели, говорят, в C# слово this надо обязательно писать? Отвечал, что не обязательно, но я его всегда пишу потому что я дисциплинированный.
  • Re[2]: Стиль декларирования челенов класса
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 25.01.06 10:14
    Оценка: +2
    Здравствуйте, McSeem2, Вы писали:

    MS>По моему глубокому убеждению, идентификаторы должны начинаться и заканчиваться буквами. Прописными или строчными, но буквами. Подчеркивания допустимы (и даже необходимы) внутри идентификатора, но не по краям. В этом случае, идентификаторы гораздо легче визуально отделяются от знаков препинания (операций) — как в обычном, естественном тексте. Иначе неизбежно полявляются brainfuck-шедевры типа:

    MS>
    MS>_a_-_b_._c_->_d_
    MS>


    А мне что-то другое
    Автор: eao197
    Дата: 24.11.05
    напоминает

    Сам для членов класса использую префикс m_. Привычно, хотя и избыточно слегка. В последнее время в C++ модно стало завершающее подчеркивание использовать (в ACE, например, это вообще стандарт кодирования), но меня смущает, чть если к члену через точку к методу какому-то обращаться, то эта точка получается не очень заметна визуальна (особенно, если в редакторе пропорциональный шрифт используется).

    А одновременное использование лидирующего и заверщающего подчеркивания действительно неудобоваримые комбинации могут образовывать
    Автор: mefrill
    Дата: 22.01.06
    :
    predictor( 0, gr_.rules_[ states_[ 0 ].items_[ _item_index ].rule_index_ ].right_part_[ states_[ 0 ].items_[ _item_index ].dot_pos_ ] );


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[2]: Стиль декларирования челенов класса
    От: GlebZ Россия  
    Дата: 25.01.06 10:56
    Оценка: :))) :)))
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Неужели, говорят, в C# слово this надо обязательно писать? Отвечал, что не обязательно, но я его всегда пишу потому что я дисциплинированный.

    Сергей! А как же синтаксический оверхед?
    Re[2]: Стиль декларирования челенов класса
    От: GlebZ Россия  
    Дата: 25.01.06 10:58
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>В Java стиль описан документом от Sun. Подчеркивания я там что то не припомню. А в C# разные стили бывают, в том числе и с m_.

    Стили то разные. Но префикс m_, насколько я помню, был явно запрещен в рекомендательном порядке.
    Re[3]: Стиль декларирования челенов класса
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 25.01.06 11:41
    Оценка:
    Здравствуйте, GlebZ, Вы писали:

    GZ>Стили то разные. Но префикс m_, насколько я помню, был явно запрещен в рекомендательном порядке.


    Что не помешало им самим его использовать в некоторых классах фреймворка.
    ... << RSDN@Home 1.2.0 alpha rev. 631>>
    AVK Blog
    Re[3]: Стиль декларирования челенов класса
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 25.01.06 12:14
    Оценка:
    Здравствуйте, GlebZ, Вы писали:

    GZ>Сергей! А как же синтаксический оверхед?


    Он отсутствует.
    Надо же как-то указать на то что идентификатор принадлежит объекту, а не взят с потолка. Записывая так:

    "идентификатор объекта"."идентификатор члена"

    мы получаем то, что нам было нужно, и платим за это минимальную цену.
    Кстати, например, в языках Oberon-2 и Component Pascal аналог this надо писать обязательно:

    PROCEDURE (me: MyObject) DoSmth* (arg: Arg), NEW, EXTENSIBLE;
    BEGIN me.value := arg
    END DoSmth;

    Здесь me — играет роль this (можно называть как хочется: me, self, this, p, q,..., я,... — это просто имя 0-вого аргумента вызова
    процедуры связанной с типом MyObject).
    Re[4]: Стиль декларирования челенов класса
    От: GlebZ Россия  
    Дата: 25.01.06 12:44
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Надо же как-то указать на то что идентификатор принадлежит объекту, а не взят с потолка.

    Зачем? И так понятно.

    СГ>Кстати, например, в языках Oberon-2 и Component Pascal аналог this надо писать обязательно:

    Брр. Г-н Вирт что, Турбо-Паскаль не учил?
    Синтаксический оверхед однозначна.

    Что касается вашего стиля, это все равно что скрестить ужа с ежом. Точнее прилеплять иголки к ужу. Ну не идет подходит стиль Оберона к С#. Слишком разные языки. Пацаны такой текст не поймут.
    Re[5]: Стиль декларирования челенов класса
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 25.01.06 13:10
    Оценка: :)))
    Здравствуйте, GlebZ, Вы писали:

    GZ>...Пацаны такой текст не поймут.


    Всегда писать this
    Автор: VladD2
    Дата: 25.01.06
    — признак дисциплинированности.

    пацаны & дисциплинированность = mutual exclusion
    Re[6]: Стиль декларирования челенов класса
    От: GlebZ Россия  
    Дата: 25.01.06 13:15
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Всегда писать this
    Автор: VladD2
    Дата: 25.01.06
    — признак дисциплинированности.

    Этот код не пацан писал. А генерировал автоматизированный resharper.
    Re[2]: Стиль декларирования челенов класса
    От: aik Австралия  
    Дата: 25.01.06 13:35
    Оценка: +1
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>А я на (C#):

    СГ>
  • Переменные члены класса (в т.ч. статические) называю маленькими буквами: channel, handler, recognizer;
    СГ>
  • Локальные переменные (с маленькой областью видимости) обозначаю 1-2 буквами: a, b, c, s, h, i, j, n, rd, wr...;
    СГ>
  • Типы, процедуры, свойства, элементы enum-ов начинаю с большой буквы (а интерфейсы с I): Channel, Handler, IReader, IWriter,...;
    СГ>
  • Константы пишу заглавными буквами: MIN_LENGTH

    СГ>При обращении к любым идентификаторам пишу их полное имя:

    СГ>
  • this.*** — обращение к членам;
    СГ>
  • MyClass.*** — обращение к статическим членам;
    СГ>
  • Namespace1.Namespace2.Namespace3.SomeClass1.*** — обращение ко всему, что за пределами данного класса.

    Если придерживаться 3 простых правил, то путаницы не будет:
    1. функции не больше 2 экранов.
    2. глобальным объектам — строгое нет.
    3. локальные переменные объявлять непосредственно перед использованием.

    СГ>Короче, получается так, что глядя даже на небольшой фрагмент текста (заранее не зная, что обозначают идентификаторы) — становится понятно что написано. Всегда!


    Утешай себя Просто так, добавляя лишь this, понятность не вырастет, если код изначально корявый.

    СГ>Плюсовики видевшие мои тексты сразу спрашивали почему у меня везде написано: this.***, this.***, this.***? Неужели, говорят, в C# слово this надо обязательно писать? Отвечал, что не обязательно, но я его всегда пишу потому что я дисциплинированный.


    Нет, это — неуместное занудство, а не дисциплина. И достаточно чтобы посторонний человек поработал с таким кодом чуть-чуть и кое-где забыл написать this, все, целостность нарушена и дальше тебя будут вспоминать только недобрыми словами.
  • Re[4]: Стиль декларирования челенов класса
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 25.01.06 13:35
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Он отсутствует.

    СГ>Надо же как-то указать на то что идентификатор принадлежит объекту, а не взят с потолка. Записывая так:

    СГ>"идентификатор объекта"."идентификатор члена"


    СГ>мы получаем то, что нам было нужно, и платим за это минимальную цену.

    СГ>Кстати, например, в языках Oberon-2 и Component Pascal аналог this надо писать обязательно:
    А, то есть минимальная цена = (цене в Oberon-2 и Component Pascal) по определению?
    Минимальная цена — не указывать лишних квалификаторов. Несложные правила именования позволяют не натыкаться на конфликты между именами параметров, переменными, и полями.
    1.1.4 stable rev. 510
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[5]: Стиль декларирования челенов класса
    От: McSeem2 США http://www.antigrain.com
    Дата: 25.01.06 15:14
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    MS>>Именно так иногда и делаю. По крайней мере, становятся видны операции (прочие аспекты кодирования в данном примере мы не рассматриваем).


    VD>Если твой код отформатировать в соотвествии с предложением твоий оппонентов, то он будет выглядеть примерно так:


    [. . .]
    Я специально сделал оговорку, что "прочие аспекты не рассматриваем".

    VD>Кстати, со своим экстровагантным выделением скобок и стремлением сжать все в кучу, ты потерял скобку.


    Код не мой, Copyright (c) 1995 by P.J. Plauger. Это copy-paste куска из std::vector. Я его привел, чтобы показать всю несуразность, когда сначала возникают некие догмы, а потом они доводятся до полного абсурда.
    STLPort, кстати, не лучше
    pointer __tmp = _M_allocate_and_copy(__xlen, __CONST_CAST(const_pointer, __x._M_start) + 0,
                                                 __CONST_CAST(const_pointer, __x._M_finish) + 0);
    _M_clear();
    this->_M_start = __tmp;
    this->_M_end_of_storage._M_data = this->_M_start + __xlen;

    Тот же самый brainfuck и спереди и сзади, похожий на азбуку Морзе. Плюс ко всему, в нем присутствуют строки неимоверной длины. Но эту тему мы не будем развивать.

    За потерянную скобку приношу наиглубочайшие извинения и проч.
    McSeem
    Я жертва цепи несчастных случайностей. Как и все мы.
    Re[6]: Стиль декларирования челенов класса
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 25.01.06 15:54
    Оценка:
    Здравствуйте, McSeem2, Вы писали:

    MS>Код не мой, Copyright (c) 1995 by P.J. Plauger.


    Ну, вот прими к сведению, что то о чем с тобой говорят и то что делает Plauger — это две большие разницы.
    ... << RSDN@Home 1.2.0 alpha rev. 631>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[7]: Стиль декларирования челенов класса
    От: WolfHound  
    Дата: 25.01.06 17:14
    Оценка: +1
    Здравствуйте, GlebZ, Вы писали:

    GZ>Этот код не пацан писал. А генерировал автоматизированный resharper.

    Не resharper, а reflector! Это немного разнае программы.
    ... << RSDN@Home 1.1.4 beta 6a rev. 436>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[6]: Стиль декларирования челенов класса
    От: alexeiz  
    Дата: 25.01.06 18:21
    Оценка:
    Здравствуйте, McSeem2, Вы писали:

    MS>Код не мой, Copyright (c) 1995 by P.J. Plauger. Это copy-paste куска из std::vector.


    Я так и думал. Его стиль ни с чем не спутаешь.
    Re[3]: Стиль декларирования челенов класса
    От: Kaa Украина http://blog.meta.ua/users/kaa/
    Дата: 26.01.06 10:57
    Оценка:
    Здравствуйте, FurJ, Вы писали:

    FJ>Однако, хотелось бы узнать, что говорит стандарт по поводу переднего подчеркивания.


    Любые имена, содержащие двойное подчеркивание, зарезервированы за компилятором (и реализацией стандартной библиотеки, что одно и то же).

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

    (17.4.3.1.2)

    Вот страница, на которой описано, что нельзя пользовать из имен.
    Алексей Кирдин
    Re[3]: Стиль декларирования челенов класса
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 26.01.06 11:14
    Оценка:
    Здравствуйте, aik, Вы писали:

    aik>Нет, это — неуместное занудство, а не дисциплина. И достаточно чтобы посторонний человек поработал с таким кодом чуть-чуть и кое-где забыл написать this, все, целостность нарушена и дальше тебя будут вспоминать только недобрыми словами.


    Да ладно. Alt+Ctrl+O и все дела
    ... << RSDN@Home 1.2.0 alpha rev. 631>>
    AVK Blog
    Re[4]: Стиль декларирования челенов класса
    От: alexeiz  
    Дата: 26.01.06 11:25
    Оценка:
    Здравствуйте, McSeem2, Вы писали:

    MS>Здравствуйте, Воронков Василий, Вы писали:


    ВВ>>На самом деле любую нотацию можно довести до brainfuck-a. Замени в этом примере подчеркивание на "m_" — в глазах будет рябить не меньше.


    MS>Именно так иногда и делаю. По крайней мере, становятся видны операции (прочие аспекты кодирования в данном примере мы не рассматриваем).

    MS>
    MS>        if (m_End - m_Last < m_M)
    MS>            {sizem_type m_N = size() + (m_M < size() ? size() : m_M);
    MS>            iterator m_S = allocator.allocate(m_N, (void *)0);
    MS>            iterator m_Q = m_Ucopy(m_First, m_P, m_S);
    MS>            m_Q = m_Ucopy(m_F, m_L, m_Q);
    MS>            m_Ucopy(m_P, m_Last, m_Q);
    MS>            m_Destroy(m_First, m_Last);
    MS>            allocator.deallocate(m_First, m_End - m_First);
    MS>            m_End = m_S + m_N;
    MS>            m_Last = m_S + size() + m_M;
    MS>            m_First = m_S; }
    MS>        else if (m_Last - m_P < m_M)
    MS>            {m_Ucopy(m_P, m_Last, m_P + m_M);
    MS>            m_Ucopy(m_F + (m_Last - m_P), m_L, m_Last);
    MS>            copy(m_F, m_F + (m_Last - m_P), m_P);
    MS>            m_Last += m_M; }
    MS>        else if (0 < m_M)
    MS>            {m_Ucopy(m_Last - m_M, m_Last, m_Last);
    MS>            copym_backward(m_P, m_Last - m_M, m_Last);
    MS>            copy(m_F, m_L, m_P);
    MS>            m_Last += m_M; }}
    
    MS>


    Такому стилю, кстати, есть интересное объяснение: http://groups.google.com/group/comp.lang.c++.moderated/msg/d2187ad2f05682e8?dmode=source&amp;hl=en
    Re[6]: Стиль декларирования челенов класса
    От: alexeiz  
    Дата: 26.01.06 11:26
    Оценка:
    Здравствуйте, McSeem2, Вы писали:

    MS>STLPort, кстати, не лучше

    MS>
    MS>pointer __tmp = _M_allocate_and_copy(__xlen, __CONST_CAST(const_pointer, __x._M_start) + 0,
    MS>                                             __CONST_CAST(const_pointer, __x._M_finish) + 0);
    MS>_M_clear();
    this->>_M_start = __tmp;
    this->>_M_end_of_storage._M_data = this->_M_start + __xlen;
    MS>

    MS>Тот же самый brainfuck и спереди и сзади, похожий на азбуку Морзе.

    Что тебе не нравится? Двойное подчёркивание?
    Re[3]: Стиль декларирования челенов класса
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 26.01.06 11:51
    Оценка: :))
    Здравствуйте, aik, Вы писали:

    aik>...кое-где забыл написать this...


    Да, есть такое дело. Использование this по желанию — проблема языков C#, Delphi, и т.п.

    В Oberon-2 и в Component Pascal эквивалент this писать надо обязательно.
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.