Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> венгерская нотация, хочу узнать мнение опытных программистов 
:(
    Опции темы
viktor1301
Дата 1.8.2006, 05:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 20.7.2006

Репутация: нет
Всего: нет



В Интернете прочитал про Венгерскую нотацию, хорошего и плохого. Хотелось бы узнать мнение опытных программистов. Стоит ли её использовать при программировании на C#?
PM MAIL   Вверх
mr.DUDA
Дата 1.8.2006, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



По-моему, это дело привычки. Учитывая, что программисты C# в основном не используют венгерскую нотацию, можно последовать их примеру. А можно и не следовать.

З.Ы. венгерскую используют MFC-шники smile


--------------------
user posted image
PM MAIL WWW   Вверх
Ch0bits
Дата 1.8.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 9
Всего: 62



Цитата(mr.DUDA @  1.8.2006,  09:39 Найти цитируемый пост)
программисты C# в основном не используют венгерскую нотацию

Потому что есть IntelliSence.  smile
PM WWW   Вверх
ivashkanet
Дата 1.8.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Ch0bits @  1.8.2006,  10:46 Найти цитируемый пост)
Потому что есть IntelliSence.  

Именно. 
Но я иногда ее все же использую, когда есть набор однотипных элементов (например кнопок на форме). Тогда они по алфавиту идут одна за другой  smile 
PM MAIL WWW ICQ   Вверх
Дрон
Дата 1.8.2006, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 92



Цитата(Ch0bits @  1.8.2006,  11:46 Найти цитируемый пост)
Потому что есть IntelliSence.  

Ага.

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

А вот в UI-дизайне постоянно пользуюсь префиксами, обозначающими тип контрола: 
lbl - Label, tb - TextBox, cb - ComboBox, ch (ck) - CheckBox, btn - Button и т.п.

Это сообщение отредактировал(а) Дрон - 1.8.2006, 13:18


--------------------
Да. Именно так.
PM   Вверх
Exception
Дата 1.8.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Я лично не пользуюсь. Не считаю нужным. ИМХО, она только мешает чтению кода.
PM   Вверх
Softaz
Дата 1.8.2006, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 3
Всего: 16



Использую рекомендованные CodeArchitect префиксы имен.


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
Exception
Дата 2.8.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Раз уж пишем -- ссылочку можно?
PM   Вверх
stab
Дата 2.8.2006, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



для полей использую префикс "m_", чтобы с параметрами путаницы не возникало:

public MyObject(string name)
{
  m_name = name;
}

и это единственная причина. иначе приходится извращаться с придумыванием названий вроде nameArg или nameField.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
ivashkanet
Дата 2.8.2006, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(cully @  2.8.2006,  15:16 Найти цитируемый пост)
m_name

А просто префикса почему не хватает?
Код

_name

P.S. OffTop: Наберите name на русской раскладке. Получится... тфьу (почти тьфуsmile 
PM MAIL WWW ICQ   Вверх
stab
Дата 2.8.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата(ivashkanet @  2.8.2006,  19:21 Найти цитируемый пост)
А просто префикса почему не хватает?


так уж повелось с незапамятных времён.  на самом деле, подчёрк плохо читается, маленькая экранная площадь симовла smile  а ежели ещё студия чего-нить подчеркнёт волнистой линией, то подчёрка вообще не видать.

Добавлено @ 15:30 
..кстати, "m" видимо от слова member (член) произошло.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Дрон
Дата 2.8.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 92



Цитата(cully @  2.8.2006,  16:28 Найти цитируемый пост)
..кстати, "m" видимо от слова member (член) произошло. 

Я тоже так думаю.

Код
m_name = name;

Не... я m_ использую в случае, если есть поле класса, но я не хочу случайно (например, из-за опечатки или забыв что-то) к нему обращаться напрямую, вместо вызова соответствующего аксессора:
Код
private int m_field;

private int Field
{
 get
 {
   // какая-то инициализация
   return m_field;
 }
 set
 {
  // тоже какие-то действия
 }
}



--------------------
Да. Именно так.
PM   Вверх
ivashkanet
Дата 2.8.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Дрон, так и у cully ображение к полю идет в конструкторе (Во всяком случае по названию точно конструктор)
Цитата(cully @  2.8.2006,  15:16 Найти цитируемый пост)
public MyObject(string name){  m_name = name;}




PM MAIL WWW ICQ   Вверх
Bose
Дата 1.10.2006, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: нет
Всего: 51



Прошу всех интересующихся венгерской нотацией взлянуть на эту статью

 smile 

Вкратце, эта статья о том, что изначально нотация задумывалась не как средство отображения типов, а скорее как средство для более ясного понимания структуры программы по именам пременных и функций. smile 
PM MAIL WWW Skype   Вверх
$tatic
Дата 1.10.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 2
Всего: 22



Цитата(cully @  2.8.2006,  16:16 Найти цитируемый пост)
для полей использую префикс "m_", чтобы с параметрами путаницы не возникало:

public MyObject(string name)
{
  m_name = name;
}

и это единственная причина. иначе приходится извращаться с придумыванием названий вроде nameArg или nameField. 

Есть же более удобный способ, я им пользуюсь:
Код

public MyObject(string name)
{
  this.name = name;
}

Вот и все. И не надо ни придумывать другие слова, ни использовать всякие _, m_ и прочую гадость. ИМХО она только VBшникам нужна, поскольку у них регистронезависимый код.

Это сообщение отредактировал(а) $tatic - 1.10.2006, 12:16
PM MAIL   Вверх
mr.DUDA
Дата 1.10.2006, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата($tatic @  1.10.2006,  12:00 Найти цитируемый пост)
this.name = name;

Чревато тем, что когда-нибудь забудешь написать this и будешь долго искать почему поле не заполняется smile


--------------------
user posted image
PM MAIL WWW   Вверх
$tatic
Дата 1.10.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 2
Всего: 22



Ну в принципе можно так же "забыть" и public для метода/конструктора поставить. А в студии this видно, поскольку он синий. Лично у меня написание this.name = name; уже рефлексивно.
PM MAIL   Вверх
ivashkanet
Дата 2.10.2006, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата($tatic @  1.10.2006,  12:00 Найти цитируемый пост)
 И не надо ни придумывать другие слова, ни использовать всякие _, m_ и прочую гадость. ИМХО она только VBшникам нужна, поскольку у них регистронезависимый код.

А я не согласен  smile 
Очень даже удобно, когда все внутренние члены класса находятся в одном месте. Нажал "_", Ctrl + J (или Ctrl + Пробел) и выбирай нужный тебе  smile 
PM MAIL WWW ICQ   Вверх
Goganchic
Дата 2.10.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



По мне, так это все дело привычки. Одним людям удобнее использовать венгерскую нотацию, а другим нет, причем бывает так, что и у тех и у других код очень даже читаемый, а если они меняются местами, то все... пиши пропало...
PM Jabber   Вверх
Exception
Дата 3.10.2006, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(cully @  2.8.2006,  16:16 Найти цитируемый пост)
для полей использую префикс "m_", чтобы с параметрами путаницы не возникало:


А мне это не нравится по идеологическим соображениям. Целиком за

Код

class SomeClass
{
    private SomeType _something;

    public SomeType Something
    {
        get { return _something; }
        set { _something = value; }
    }

    public SomeClass(SomeType something)
    {
        _something = something;
    }
}

PM   Вверх
mr.DUDA
Дата 3.10.2006, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



кстати, вроде, это Кэмел-нотация называется


--------------------
user posted image
PM MAIL WWW   Вверх
Medved
Дата 5.10.2006, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 3
Всего: 154



Microsoft рекомендует использовать смесь вингерской и кэмел-нотации. Где-то на винчестере лежит руководство по оформлению кода в .NET, если найду, выложу.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Marvel
Дата 9.10.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 31.8.2003
Где: Belarus, Polatsk

Репутация: нет
Всего: нет



Для именования используются нотации: Паскаль (каждое логическое слово должно начинаться с заглавной буквы. (TestCounter)) и Камел (первый символ первого логического слова начинается с маленькой буквы, остальные логические слова - с большой. (testCounter)).

Элемент    Нотация    Примечания
класс / структура    Паскаль    
интерфейс    Паскаль    Начинается с “I”
перечисление    Паскаль    
элементы перечисления    Паскаль    
делегаты    Паскаль    заканчивается “EventHandler”
класс исключения    Паскаль    заканчивается “Exception”
методы    Паскаль    
пространство имен    Паскаль    
свойство    Паскаль    
константы    Паскаль    
аргументы    Камел    
переменные внутри методов    Камел    

Поля именуются, используя конвенцию Камел, добавляя символ подчеркивания вначале. (_testCounter) 
Запрещается использовать венгерскую нотацию (в имени присутствуют префиксы для обозначения типа: string strName). Запрещается использовать постфиксы для этих же целей (enum ColorsEnum).

PM MAIL WWW ICQ AOL   Вверх
$tatic
Дата 10.10.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 2
Всего: 22



Интересно, что в Майкрософте символ подчеркивания вроде бы не пишут. По крайней мере в их примерах я такого не встречал.
PM MAIL   Вверх
mr.DUDA
Дата 10.10.2006, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата($tatic @  10.10.2006,  19:49 Найти цитируемый пост)
Интересно, что в Майкрософте символ подчеркивания вроде бы не пишут. По крайней мере в их примерах я такого не встречал.

Хы, у них там вообще чёрт знает что творится. В старых классах юзается m_, в новых - подчёркивание. Есть смешанные примеры:

Код
[Serializable]
public class HttpWebRequest : WebRequest, ISerializable
{

// ...

      // Fields
      private HttpAbortDelegate _AbortDelegate;
      private ICredentials _AuthInfo;
      private int _AutoRedirects;
      private Booleans _Booleans;
      private DateTime _CachedIfModifedSince;
      private X509CertificateCollection _ClientCertificates;
      private LazyAsyncResult _ConnectionAResult;
      private string _ConnectionGroupName;
      private LazyAsyncResult _ConnectionReaderAResult;
      private long _ContentLength;
      private HttpContinueDelegate _ContinueDelegate;
      private CookieContainer _CookieContainer;
      private object _CoreResponse;
      private WebHeaderCollection _HttpRequestHeaders;
      internal HttpWebResponse _HttpResponse;
      private HttpWriteMode _HttpWriteMode;
      private int _MaximumAllowedRedirections;
      private int _MaximumResponseHeadersLength;
      private string _MediaType;
      private int _NestedWriteSideCheck;
      private ConnectStream _OldSubmitWriteStream;
      private Uri _OriginUri;
      private KnownHttpVerb _OriginVerb;
      private IWebProxy _Proxy;
      private AuthenticationState _ProxyAuthenticationState;
      private ProxyChain _ProxyChain;
      private LazyAsyncResult _ReadAResult;
      private int _ReadWriteTimeout;
      private int _RequestContinueCount;
      private TriState _RequestIsAsync;
      private int _RerequestCount;
      private AuthenticationState _ServerAuthenticationState;
      internal ServicePoint _ServicePoint;
      private ConnectStream _SubmitWriteStream;
      private int _Timeout;
      private TimerThread.Timer _Timer;
      private TimerThread.Queue _TimerQueue;
      private UnlockConnectionDelegate _UnlockDelegate;
      private Uri _Uri;
      private KnownHttpVerb _Verb;
      private LazyAsyncResult _WriteAResult;
      private byte[] _WriteBuffer;
      internal const string ChunkedHeader = "chunked";
      private const string ContinueHeader = "100-continue";
      internal const int DefaultContinueTimeout = 350;
      private const int DefaultReadWriteTimeout = 0x493e0;
      internal const string DeflateHeader = "deflate";
      internal const string GZipHeader = "gzip";
      private static readonly byte[] HttpBytes;
      private int m_Aborted;
      private DecompressionMethods m_AutomaticDecompression;
      private bool m_BodyStarted;
      private InterlockedGate m_ContinueGate;
      private TimerThread.Timer m_ContinueTimer;
      private bool m_Extra401Retry;
      private bool m_HeadersCompleted;
      private bool m_InternalConnectionGroup;
      private bool m_IsCurrentAuthenticationStateProxy;
      private bool m_KeepAlive;
      private bool m_LockConnection;
      private bool m_NtlmKeepAlive;
      private bool m_OnceFailed;
      private bool m_OriginallyBuffered;
      private object m_PendingReturnResult;
      private bool m_Pipelined;
      private bool m_PreAuthenticate;
      private bool m_RequestSubmitted;
      private bool m_Retry;
      private bool m_Saw100Continue;
      private bool m_SawInitialResponse;
      internal const HttpStatusCode MaxOkStatus = ((HttpStatusCode) 0x12b);
      private const HttpStatusCode MaxRedirectionStatus = ((HttpStatusCode) 0x18f);
      private const int RequestLineConstantSize = 12;
      private static readonly WaitCallback s_AbortWrapper;
      private static readonly TimerThread.Callback s_ContinueTimeoutCallback;
      private static readonly TimerThread.Queue s_ContinueTimerQueue;
      private static readonly WaitCallback s_EndWriteHeaders_Part2Callback;
      private static readonly TimerThread.Callback s_TimeoutCallback;
      private static int s_UniqueGroupId;

// ...

}



--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 11.10.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



mr.DUDA, а когда M$ следовали собственным guidelines smile ?
PM   Вверх
mr.DUDA
Дата 11.10.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Exception, у них слишком много индусов-программеров, индусов-манагеров, индусов-лидов, за всеми не уследишь smile


--------------------
user posted image
PM MAIL WWW   Вверх
$tatic
Дата 11.10.2006, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 2
Всего: 22



т.е. это даже не венгерская, а индийская нотация уже  smile 
PM MAIL   Вверх
mr.DUDA
Дата 11.10.2006, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



$tatic,  smile 

Венгерка устарела. Об этом и тема. А про индусов мы не говорим, у них свои "шахматные" правила smile


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 12.10.2006, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(mr.DUDA @  10.10.2006,  22:53 Найти цитируемый пост)
      private static int s_UniqueGroupId;

Гы, еще одна интересность: private static идет с префиксом s_
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1702 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.