А я на (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 надо обязательно писать? Отвечал, что не обязательно, но я его всегда пишу потому что я дисциплинированный.
Здравствуйте, McSeem2, Вы писали:
MS>По моему глубокому убеждению, идентификаторы должны начинаться и заканчиваться буквами. Прописными или строчными, но буквами. Подчеркивания допустимы (и даже необходимы) внутри идентификатора, но не по краям. В этом случае, идентификаторы гораздо легче визуально отделяются от знаков препинания (операций) — как в обычном, естественном тексте. Иначе неизбежно полявляются brainfuck-шедевры типа: MS>
Сам для членов класса использую префикс m_. Привычно, хотя и избыточно слегка. В последнее время в C++ модно стало завершающее подчеркивание использовать (в ACE, например, это вообще стандарт кодирования), но меня смущает, чть если к члену через точку к методу какому-то обращаться, то эта точка получается не очень заметна визуальна (особенно, если в редакторе пропорциональный шрифт используется).
А одновременное использование лидирующего и заверщающего подчеркивания действительно неудобоваримые комбинации могут образовывать
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Неужели, говорят, в C# слово this надо обязательно писать? Отвечал, что не обязательно, но я его всегда пишу потому что я дисциплинированный.
Сергей! А как же синтаксический оверхед?
Здравствуйте, AndrewVK, Вы писали:
AVK>В Java стиль описан документом от Sun. Подчеркивания я там что то не припомню. А в C# разные стили бывают, в том числе и с m_.
Стили то разные. Но префикс m_, насколько я помню, был явно запрещен в рекомендательном порядке.
Здравствуйте, 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).
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Надо же как-то указать на то что идентификатор принадлежит объекту, а не взят с потолка.
Зачем? И так понятно.
СГ>Кстати, например, в языках Oberon-2 и Component Pascal аналог this надо писать обязательно:
Брр. Г-н Вирт что, Турбо-Паскаль не учил?
Синтаксический оверхед однозначна.
Что касается вашего стиля, это все равно что скрестить ужа с ежом. Точнее прилеплять иголки к ужу. Ну не идет подходит стиль Оберона к С#. Слишком разные языки. Пацаны такой текст не поймут.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>А я на (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, все, целостность нарушена и дальше тебя будут вспоминать только недобрыми словами.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Он отсутствует. СГ>Надо же как-то указать на то что идентификатор принадлежит объекту, а не взят с потолка. Записывая так:
СГ>"идентификатор объекта"."идентификатор члена"
СГ>мы получаем то, что нам было нужно, и платим за это минимальную цену. СГ>Кстати, например, в языках Oberon-2 и Component Pascal аналог this надо писать обязательно:
А, то есть минимальная цена = (цене в Oberon-2 и Component Pascal) по определению?
Минимальная цена — не указывать лишних квалификаторов. Несложные правила именования позволяют не натыкаться на конфликты между именами параметров, переменными, и полями.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, VladD2, Вы писали:
MS>>Именно так иногда и делаю. По крайней мере, становятся видны операции (прочие аспекты кодирования в данном примере мы не рассматриваем).
VD>Если твой код отформатировать в соотвествии с предложением твоий оппонентов, то он будет выглядеть примерно так:
[. . .]
Я специально сделал оговорку, что "прочие аспекты не рассматриваем".
VD>Кстати, со своим экстровагантным выделением скобок и стремлением сжать все в кучу, ты потерял скобку.
Код не мой, Copyright (c) 1995 by P.J. Plauger. Это copy-paste куска из std::vector. Я его привел, чтобы показать всю несуразность, когда сначала возникают некие догмы, а потом они доводятся до полного абсурда.
STLPort, кстати, не лучше
Тот же самый brainfuck и спереди и сзади, похожий на азбуку Морзе. Плюс ко всему, в нем присутствуют строки неимоверной длины. Но эту тему мы не будем развивать.
За потерянную скобку приношу наиглубочайшие извинения и проч.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, GlebZ, Вы писали:
GZ>Этот код не пацан писал. А генерировал автоматизированный resharper.
Не resharper, а reflector! Это немного разнае программы.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, aik, Вы писали:
aik>Нет, это — неуместное занудство, а не дисциплина. И достаточно чтобы посторонний человек поработал с таким кодом чуть-чуть и кое-где забыл написать this, все, целостность нарушена и дальше тебя будут вспоминать только недобрыми словами.
Здравствуйте, McSeem2, Вы писали:
MS>Здравствуйте, Воронков Василий, Вы писали:
ВВ>>На самом деле любую нотацию можно довести до brainfuck-a. Замени в этом примере подчеркивание на "m_" — в глазах будет рябить не меньше.
MS>Именно так иногда и делаю. По крайней мере, становятся видны операции (прочие аспекты кодирования в данном примере мы не рассматриваем). MS>