forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   Использование "_" или "this." для локальным переменных экземпляра класса. (http://forum.boolean.name/showthread.php?t=15847)

moka 14.11.2011 22:36

Ответ: Использование "_" или "this." для локальным переменных экземпляра класса.
 
Цитата:

Сообщение от pax (Сообщение 209721)

Уху, и при этом полная вырезка относящаяся к очень коммерчески популярному языку Java - который является "близнецом" C#.
Цитата:

ocal variables, instance variables, and class variables are also written in lowerCamelCase. Variable names should not start with underscore (_) or dollar sign ($) characters, even though both are allowed. Certain coding conventions state that underscores should be used to prefix all instance variables, for improved reading and program understanding.
Насчёт того что для переменныз юзать lowerCamelCase (или camelBack), а для аксессоров использовать CamelCase - это полностью согласен и за. Тем более лично против использования "_" в наименованиях перменных или классов вообще. У меня он вообще не встречается, и код имхо читабельнее. В крупных OpenSource проектах тоже частенько можно найти где их вообще нету и не используют.

pax 14.11.2011 22:47

Ответ: Использование "_" или "this." для локальным переменных экземпляра класса.
 
В общем вывод - зависит от принятого стиля конкретной конторы/человека. Следовательно утверждение
Цитата:

Сообщение от MoKa (Сообщение 209640)
Также использование "_" для приватных переменных объекта, в C# давно никто не юзает тоже.

не верно. Что и требовалось доказать.

Я скажу по собственному опыту - использование знака подчеркивания делает более читабельным код (для меня точно) и чаще ускоряет кодинг.

moka 14.11.2011 23:01

Ответ: Использование "_" или "this." для локальным переменных экземпляра класса.
 
Цитата:

Сообщение от pax (Сообщение 209729)
В общем вывод - зависит от принятого стиля конкретной конторы/человека. Следовательно утверждение
Цитата:

Сообщение от MoKa (Сообщение 209640)
Также использование "_" для приватных переменных объекта, в C# давно никто не юзает тоже.

не верно. Что и требовалось доказать.

Ну тут да, я загнул. Используют, но явная тендеция - уходить от этой привычки очень распространена.

Цитата:

Сообщение от pax (Сообщение 209729)
Я скажу по собственному опыту - использование знака подчеркивания делает более читабельным код (для меня точно) и чаще ускоряет кодинг.

Читабельность не лучше чем с использованием "_", а учитывая разницу стилей, то если рассматривать разработчика который не знаком с подобным стилем, потребуется ознакомление и привычка. Когда при использовании this. - этого не требуется, т.к. это часть спецификации языка и common sense.
Насчёт ускорения кодинга, ну тут если только в колличестве символов. Обращение к локальным переменным также шустро через this. как и через _.
Тем более, когда обращаешься к мемберам класса (переменным, методам, аксессорам и т.п.), то в голове всегда будет сразу "this." и без разделений так даже проще: хочешь обратиться к личной сущности экземпляра, автоматом набираешь "this.", и получаешь удобный список всех личных сущностей.
При этом многие шустрые разрабы (отличный пример в онлайн туториалах, где народ надрочен и кодит достаточно шустро), всё равно будешь набирать почти полное имя переменной, или хотя бы ту часть, начиная с которой эта переменная останеться одна или будет уже выделена в автодополнении. Редко кто юзает стрелки и темболее мышку чтобы искать нужную переменную, только в случае если ты не знаешь их. Тогда да, _ - сразу отфильтрует остальное от локальных, приватных перемен. Но это в случае если нигде глобально с "_" ничего не начиналось, иначе пойдёт полная каша.

Дело лично каждого. Я лишь заметил такую тенденцию что всё меньше и меньше юзают "_". Да и большинство кода, примеров и т.п. из msdn также меньше и меньше юзает "_", я уже почти вообще не встречаю этого.

ffinder 14.11.2011 23:52

Ответ: Использование "_" или "this." для локальным переменных экземпляра класса.
 
this.fieldName это ГАРАНТИЯ от компилятора.
_fieldName это соглашение, которое форсится людьми и ими же нарушается.

поэтому я ненавижу всякие ПРЕФИКСЫ.
одинарное подчеркивание, некоторые доходят до двойного и тройного...
так же всякие m_memberName вызывают неприятие.

хороший код опирается на компилятор, плохой - на соглашения между людьми.

pax 15.11.2011 00:05

Ответ: Использование "_" или "this." для локальным переменных экземпляра класса.
 
Двойные и тройные подчеркивания это перебор, префиксы с m_ тоже отвратительны.

Randomize 15.11.2011 01:32

Ответ: Использование "_" или "this." для локальным переменных экземпляра класса.
 
Я считаю, что использовать префикс "_" нужно в тех ЯП где нет Private (например BlitzMax) в остальных можно обойтись и без этого. Префикс "_" сводит на нет автокомплит в IDE. Вернее он замедляет процесс нахождения нужного элемента для подстановки.

Почему public для полей - плохой тон? Лучше что-ли писать на каждое поле GetValue/SetValue?

pax 15.11.2011 07:09

Ответ: Использование "_" или "this." для локальным переменных экземпляра класса.
 
Да лучше. Лучше вместо поля создать автосвойство. Такой подход в любое время позволит сделать обработку присвоения/взятия значения преобразовав автосвойство в нормальное свойство.
PHP код:

public float Life{get; private set;} 

Открытые поля в Net Framework характерны только для структур.

HolyDel 15.11.2011 13:46

Ответ: Использование "_" или "this." для локальным переменных экземпляра класса.
 
правда это не шарп.
использую постфикс _ для приватных элементов класса. с одной стороны это позволяет выносить в интерфейс нормальные имена методов. т.е. например instance_ и instance(). с другой имеется и осмысленное имя переменной и интеллисенс не замедляется. на работе принят стандарт с m_someName;

moka 15.11.2011 14:47

Ответ: Использование "_" или "this." для локальным переменных экземпляра класса.
 
Цитата:

Сообщение от Randomize (Сообщение 209756)
Почему public для полей - плохой тон? Лучше что-ли писать на каждое поле GetValue/SetValue?

Как уже писал:
Бьёт по производительности. И тут лучше использовать Acessor'ы, для обращения к данным класса. Это реюзабельней, и более масштабируемо, т.к. можно заменить лишь тело аксессора, и везде будут применены изменения. В случае с переменными, так не пройдёт. Плюс внедрение например эвентов при изменении переменной и т.п. - это снова, чтобы это сделать, если использовал прямой доступ, придётся везде менять, во всех проектах где юзается это. А если юзался аксессор, то лишь в нём добавиться одна / две строки кода, и всё. Нигде менять не нужно. Либо менять имя переменной, и делать аксессор тем же именем как была переменная, но учитывая правила наименований сущностей - это будет грубым нарушением, что в результате ни в какие ворота.
Плюс ограничения доступа, если нужно сделать переменную модифицируемой только изнутри, а получаемой от куда угодно, или наоборот и т.п.

IGR 18.11.2011 13:36

Ответ: Использование "_" или "this." для локальным переменных экземпляра класса.
 
обычно юзаю префикс для мемберов класса mFieldName !! и все ок !! :)

johnk 26.11.2011 07:30

Ответ: Использование "_" или "this." для локальным переменных экземпляра класса.
 
MoKa, я с тобой. Тоже за нормальное именование.
Приватные от не приватных разделяю написанием первого слова в названии.

doSmth() — приватная функция
DoSmth() — не приватная

pax 26.11.2011 11:33

Ответ: Использование "_" или "this." для локальным переменных экземпляра класса.
 
Зачем различать приватные и публичные функции?

johnk 26.11.2011 16:58

Ответ: Использование "_" или "this." для локальным переменных экземпляра класса.
 
Цитата:

Сообщение от pax (Сообщение 211301)
Зачем различать приватные и публичные функции?

Мне это кажется удобным.


Часовой пояс GMT +4, время: 20:24.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot