Mike
|
Ызарг
|
|
|
|
Рег.: 02.11.2002
|
Сообщений: 8098
|
|
Рейтинг: 2147
|
|
C# code style: подчеркивания в именах переменных
29.01.2009 11:42
|
|
|
Тем временем я нашел аргумент в пользу подчеркиваний. Оказывается, некоторые разработчики передают в методы переменные, названные как локальные поля. При этом они не пользуются ReSharper-ом или другими средствами, спасающими от глупостей.
Перенесено модератором DarkGray из ветки в разделе Development
Редактировал DarkGray (30.01.2009 15:15)
|
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13646
|
|
Рейтинг: 787
|
|
Re: Пара мыслей по поводу C# code style
[re: Mike]
29.01.2009 17:31
|
|
|
Quote:
Тем временем я нашел аргумент в пользу подчеркиваний. Оказывается, некоторые разработчики передают в методы переменные, названные как локальные поля. При этом они не пользуются ReSharper-ом или другими средствами, спасающими от глупостей.
таких ситуации крайне редки. Странно, что небольшое количество ситуаций оказывает влияние на именование часто используемых приватных полей.
А вообще, у макрософта написано
Quote:
Do not use underscores, hyphens, or any other nonalphanumeric characters.
Quote:
Do not use Hungarian notation.
Hungarian notation is the practice of including a prefix in identifiers to encode some metadata about the parameter, such as the data type of the identifier.
http://msdn.microsoft.com/en-us/library/ms229045.aspx
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
Mike
|
Ызарг
|
|
|
|
Рег.: 02.11.2002
|
Сообщений: 8098
|
|
Рейтинг: 2147
|
|
Re: Пара мыслей по поводу C# code style
[re: Shurik]
29.01.2009 17:38
|
|
|
Quote:
А вообще, у макрософта написано
Да, я в курсе. В Code Analysis для .NET есть Naming Rules. Кстати, вполне жестокие.
|
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13646
|
|
Рейтинг: 787
|
|
Re: Пара мыслей по поводу C# code style
[re: Mike]
29.01.2009 17:47
|
|
|
Quote:
Да, я в курсе. В Code Analysis для .NET есть Naming Rules. Кстати, вполне жестокие.
тогда зачем вынес на обсуждение? Quote:
Первое - это попытка добавить какой-то смысл в имя переменной.
С этим все ясно - подчеркивание нормальные прогеры не используют, те кто используют не хватило ума подумать на тему красивого согласованного naming convention, и посмотреть рекомендации. Т.е. да я по одному подчеркиванию могу сделать вывод об уровне программиста .
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
Mike
|
Ызарг
|
|
|
|
Рег.: 02.11.2002
|
Сообщений: 8098
|
|
Рейтинг: 2147
|
|
Re: Пара мыслей по поводу C# code style
[re: Shurik]
29.01.2009 17:50
|
|
|
Quote:
тогда зачем вынес на обсуждение?
Потому что забыл про них. Они настолько жестокие, что их я обычно отключаю. Вместе, например, с подписыванием сборок.
|
|
__No__
|
|
|
|
|
Рег.: 17.01.2005
|
Сообщений: 21062
|
Из: Внутренняя Монголия
|
Рейтинг: 6310
|
|
Re: Пара мыслей по поводу C# code style
[re: Shurik]
29.01.2009 18:00
|
|
|
Quote:
С этим все ясно - подчеркивание нормальные прогеры не используют, те кто используют не хватило ума подумать на тему красивого согласованного naming convention, и посмотреть рекомендации
PEP8: code: Prescriptive: Naming Conventions
Names to Avoid
Never use the characters `l' (lowercase letter el), `O' (uppercase
letter oh), or `I' (uppercase letter eye) as single character variable
names.
In some fonts, these characters are indistinguishable from the numerals
one and zero. When tempted to use `l', use `L' instead.
Package and Module Names
Modules should have short, all-lowercase names. Underscores can be used
in the module name if it improves readability. Python packages should
also have short, all-lowercase names, although the use of underscores is
discouraged.
Since module names are mapped to file names, and some file systems are
case insensitive and truncate long names, it is important that module
names be chosen to be fairly short -- this won't be a problem on Unix,
but it may be a problem when the code is transported to older Mac or
Windows versions, or DOS.
When an extension module written in C or C++ has an accompanying Python
module that provides a higher level (e.g. more object oriented)
interface, the C/C++ module has a leading underscore (e.g. _socket).
Class Names
Almost without exception, class names use the CapWords convention.
Classes for internal use have a leading underscore in addition.
Exception Names
Because exceptions should be classes, the class naming convention
applies here. However, you should use the suffix "Error" on your
exception names (if the exception actually is an error).
Global Variable Names
(Let's hope that these variables are meant for use inside one module
only.) The conventions are about the same as those for functions.
Modules that are designed for use via "from M import *" should use the
__all__ mechanism to prevent exporting globals, or use the older
convention of prefixing such globals with an underscore (which you might
want to do to indicate these globals are "module non-public").
Function Names
Function names should be lowercase, with words separated by underscores
as necessary to improve readability.
mixedCase is allowed only in contexts where that's already the
prevailing style (e.g. threading.py), to retain backwards compatibility.
Function and method arguments
Always use 'self' for the first argument to instance methods.
Always use 'cls' for the first argument to class methods.
If a function argument's name clashes with a reserved keyword, it is
generally better to append a single trailing underscore rather than use
an abbreviation or spelling corruption. Thus "print_" is better than
"prnt". (Perhaps better is to avoid such clashes by using a synonym.)
Method Names and Instance Variables
Use the function naming rules: lowercase with words separated by
underscores as necessary to improve readability.
Use one leading underscore only for non-public methods and instance
variables.
To avoid name clashes with subclasses, use two leading underscores to
invoke Python's name mangling rules.
Python mangles these names with the class name: if class Foo has an
attribute named __a, it cannot be accessed by Foo.__a. (An insistent
user could still gain access by calling Foo._Foo__a.) Generally, double
leading underscores should be used only to avoid name conflicts with
attributes in classes designed to be subclassed.
Note: there is some controversy about the use of __names (see below).
Constants
Constants are usually declared on a module level and written in all
capital letters with underscores separating words. Examples include
MAX_OVERFLOW and TOTAL.
|
Dixi. |
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13646
|
|
Рейтинг: 787
|
|
Re: Пара мыслей по поводу C# code style
[re: __No__]
29.01.2009 18:11
|
|
|
я имел ввиду C#
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
scout
|
newbie
|
|
|
|
Рег.: 18.02.2005
|
Сообщений: 45
|
|
Рейтинг: 8
|
|
Пара мыслей по поводу C# code style
[re: *NONE*]
29.01.2009 21:51
|
|
|
По поводу подчеркиваний. А как вы оформляете инициализацию по требованию? Я, например, часто использую такой код: code:
string _state = null;
public string State
{
if(_state==null)
{
_state=LoadState();
}
return _state;
}
Подчеркиванием в данном случае я показываю, что остальным программистам, и мне в том числе, стоит избегать использования поля _state в других методах, а нужно пользоваться свойством State.
Перенесено модератором DarkGray из ветки в разделе Development
Присоединено модератором DarkGray
Редактировал DarkGray (30.01.2009 15:18)
|
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13646
|
|
Рейтинг: 787
|
|
Re: Пара мыслей по поводу C# code style
[re: scout]
30.01.2009 11:06
|
|
|
Quote:
Подчеркиванием в данном случае я показываю, что остальным программистам, и мне в том числе, стоит избегать использования поля _state в других методах, а нужно пользоваться свойством State.
я ж постил в этом треде цитату относительно подобных рассуждений, все это хрень.
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31415
|
|
Рейтинг: 8952
|
|
Re: Пара мыслей по поводу C# code style
[re: Shurik]
30.01.2009 15:21
|
|
|
Quote:
я ж постил в этом треде цитату относительно подобных рассуждений, все это хрень.
там нет ответа почему для той ситуации, которую привел scout (создание по первому требованию) - не стоит использовать подчеркивание.
как ты предлагаешь называть переменные из примера scout?
|
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13646
|
|
Рейтинг: 787
|
|
Re: Пара мыслей по поводу C# code style
[re: DarkGray]
30.01.2009 21:35
|
|
|
Quote:
там нет ответа
Во-первых, там явно указано Quote:
Do not use underscores, hyphens, or any other nonalphanumeric characters.
Во-вторых, вот это Quote:
Подчеркиванием в данном случае я показываю, что остальным программистам, и мне в том числе, стоит избегать использования поля _state в других методах, а нужно пользоваться свойством State.
информация не о тех данных, которые хранятся в переменной _state, а информация о самой переменной _state, т.е. это можно отнести к метаданным. И тут подходит вторая цитата Quote:
Do not use Hungarian notation. Hungarian notation is the practice of including a prefix in identifiers to encode some metadata about the parameter, such as the data type of the identifier.
Quote:
как ты предлагаешь называть переменные из примера scout?
не вижу причин, по которым для инициализации по требованию менять naming convention. code:
private string state;
public string State
{
if(state == null)
{
state = LoadState();
}
return state;
}
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
penartur2
|
|
|
|
|
Рег.: 16.06.2005
|
Сообщений: 54495
|
|
Рейтинг: 429
|
|
Re: Пара мыслей по поводу C# code style
[re: Shurik]
30.01.2009 21:38
|
|
|
В ответ на:
не вижу причин, по которым для инициализации по требованию менять naming convention.
Это вообще какое-то доведение до абсурда. Ради того, чтобы не использовать подчеркивание, ты готов назвать две переменных одинаковым именем, различающимся только регистром? Все-таки, ко всему надо подходить с умом.
В ответ на:
информация не о тех данных, которые хранятся в переменной _state, а информация о самой переменной _state, т.е. это можно отнести к метаданным. И тут подходит вторая цитата
И точно так же можно сказать про твой вариант, просто в нем информация о переменной передается не знаком подчеркивания, а нижним регистром первой буквы.
|
Я ушел на новый форум. Там правовое государство. А еще можно удобно листать аплоад |
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13646
|
|
Рейтинг: 787
|
|
Re: Пара мыслей по поводу C# code style
[re: penartur2]
30.01.2009 21:46
|
|
|
Quote:
Ради того, чтобы не использовать подчеркивание, ты готов назвать две переменных одинаковым именем, различающимся только регистром?
ващето, это широко распространенная практика. Тебя же не смущает, что имя типа часто вточности совпадает с именем свойства? И не надо извращать мои намерения, я действую в соответствие с общепринятыми рекомендованными создателями платформы naming convention, а не ради "не использовать подчеркивание". Это ж надо так извратить.
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
penartur2
|
|
|
|
|
Рег.: 16.06.2005
|
Сообщений: 54495
|
|
Рейтинг: 429
|
|
Re: Пара мыслей по поводу C# code style
[re: Shurik]
30.01.2009 21:49
|
|
|
В ответ на:
Тебя же не смущает, что имя типа часто вточности совпадает с именем свойства?
Когда я такое вижу - меня это очень смущает.
В ответ на:
И не надо извращать мои намерения, я действую в соответствие с общепринятыми рекомендованными создателями платформы naming convention
Там где-то явно рекомендуется иметь в некоторых случаях две переменные с одинаковыми именами?
|
Я ушел на новый форум. Там правовое государство. А еще можно удобно листать аплоад |
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13646
|
|
Рейтинг: 787
|
|
Re: Пара мыслей по поводу C# code style
[re: penartur2]
30.01.2009 21:51
|
|
|
Quote:
И точно так же можно сказать про твой вариант, просто в нем информация о переменной передается не знаком подчеркивания, а нижним регистром первой буквы.
да это так. Но я не использую префикс, поэтому вот эта цитата уже не подходит к моему варианту Quote:
Do not use Hungarian notation. Hungarian notation is the practice of including a prefix in identifiers to encode some metadata about the parameter, such as the data type of the identifier.
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13646
|
|
Рейтинг: 787
|
|
Re: Пара мыслей по поводу C# code style
[re: penartur2]
30.01.2009 21:59
|
|
|
Quote:
Когда я такое вижу - меня это очень смущает.
продолжаем изучение азов языка C# Quote:
The following rules outline the naming guidelines for properties:
Consider creating a property with the same name as its underlying type. For example, if you declare a property named Color, the type of the property should likewise be Color. See the example later in this topic. http://msdn.microsoft.com/en-us/library/ms229045.aspx
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13646
|
|
Рейтинг: 787
|
|
Re: Пара мыслей по поводу C# code style
[re: penartur2]
30.01.2009 22:03
|
|
|
Quote:
Там где-то явно рекомендуется иметь в некоторых случаях две переменные с одинаковыми именами?
Во-первых, не одинаковыми, регистр в C# учитывается. К сожалению, явно майкрософт прописал naming convention только для публичных и протектед конструкций. Для приватных членов остается руководствоваться только уже упомянутыми цитатами http://msdn.microsoft.com/en-us/library/ms229045.aspx
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13646
|
|
Рейтинг: 787
|
|
Re: Пара мыслей по поводу C# code style
[re: Shurik]
30.01.2009 22:05
|
|
|
Quote:
Для приватных членов остается руководствоваться только уже упомянутыми цитатами
ну и у Java позаимствовать , там все явно определено.
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
abv
|
|
|
|
|
Рег.: 21.09.2007
|
Сообщений: 6924
|
|
Рейтинг: 6747
|
|
Re: Пара мыслей по поводу C# code style
[re: Shurik]
30.01.2009 22:05
|
|
|
В ответ на:
Do choose easilyreadable identifier names. For example, a property namedHorizontalAlignment is more readable in English thanAlignmentHorizontal.Dofavor readability over brevity. The property name CanScrollHorizontallyis better than ScrollableX (an obscure reference to the X-axis).Do not use underscores, hyphens, or any other nonalphanumeric characters.Do not use Hungarian notation.
я бы еще добавил: Do not use php. Ибо съедает мозг
|
|
|
scout
|
newbie
|
|
|
|
Рег.: 18.02.2005
|
Сообщений: 45
|
|
Рейтинг: 8
|
|
Re: Пара мыслей по поводу C# code style
[re: Shurik]
30.01.2009 22:47
|
|
|
В ответ на:
Do not use Hungarian notation.Hungarian notation is the practice of including a prefix in identifiers to encode some metadata about the parameter, such as the data type of the identifier.
Инициализация по требованию - это очень частый паттерн. Я не согласен с тем, что подчеркивание в имени поля, хранящего состояние - это метаинформация об этом поле (как например, тип и т.п.). Это скорее информация о самом паттерне. Когда вы видите в коде поле, начинающееся с подчеркивания, - значит применяется паттерн Инициализация по требованию. Разве это не упрощает понимание кода?
|
|