Re[3]: Как правильно, enum или bool флаг ?
От: McSeem2 США http://www.antigrain.com
Дата: 23.12.07 19:50
Оценка:
Здравствуйте, IT, Вы писали:

IT>Буржуй это прочитает примерно так


IT>[Flags]

IT>enum ПОЛОВАЯ_ЖИЗНЬ
IT>{
IT> Человек = 0x01,
IT> Женщины = 0x02,
IT> Неизвестно = 0x04
IT>}

Да, но если написать правильно — Male/Female, то прочтет не "ПОЛОВАЯ_ЖИЗНЬ", а именно "ПОЛ".
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[3]: Как правильно, enum или bool флаг ?
От: Пётр Седов Россия  
Дата: 23.12.07 19:55
Оценка:
Здравствуйте, IT, Вы писали:
Р>>Начнем с того, что правильно Sex, а не Male.
IT>Начнём с того, что не Sex, Gender.
Насколько я знаю, sex – это пол (биологическое понятие), gender – род (грамматическое понятие). Lingvo 6.5:

gender
1. сущ.
1) грам. род
feminine gender — женский род
grammatical gender — грамматический род
masculine gender — мужской род
neuter gender — средний род
2) шутл. пол
Syn:
sex
2. гл.; поэт.
порождать
Syn:
beget, give birth, engender, produce 2.


sex
сущ.
1) биол. пол
the fair, weaker sex — прекрасный пол, женщины
the female sex — женский пол
the male sex — мужской пол
the sterner, stronger sex — сильный пол, мужчины
member of the opposite sex — представитель противоположного пола
the sex шутл. — женщины
2) секс, половая жизнь
to have sex with smb. — заниматься сексом с кем-л.
— explicit sex
— illicit sex
— kinky sex
— perverse sex
— premarital sex
— sex instinct
— sex intergrade

Пётр Седов (ушёл с RSDN)
Re[4]: Как правильно, enum или bool флаг ?
От: IT Россия linq2db.com
Дата: 23.12.07 21:30
Оценка:
Здравствуйте, McSeem2, Вы писали:

IT>>Начнём с того, что не Sex, Gender.


MS>Эвона как. Значит я могу засудить DMV, ибо на моих водительских правах написано именно "Sex: M"


Ну так тож водительские права.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Как правильно, enum или bool флаг ?
От: IT Россия linq2db.com
Дата: 23.12.07 21:30
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

ПС>Насколько я знаю, sex – это пол (биологическое понятие), gender – род (грамматическое понятие). Lingvo 6.5:


Если конкретно по медикам, то довелось мне работать на одном проекте для медиков, конкретно для докторов. Никаких сексов там не было в помине.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: Как правильно, enum или bool флаг ?
От: Пётр Седов Россия  
Дата: 23.12.07 23:11
Оценка:
Здравствуйте, IT, Вы писали:
IT>Если конкретно по медикам, то довелось мне работать на одном проекте для медиков, конкретно для докторов. Никаких сексов там не было в помине.
Пожалуй, соглашусь с Вами. Была такая игра «Rex Nebular and the Cosmic Gender Bender». В одном из описаний название было переведено так: «Рекс Небьюлар и космический изменитель пола». Статья в Wikipedia:

Rex Nebular and the Cosmic Gender Bender

Storyline

So they invented a machine that would allow them to alter their sex for short periods of time. This machine became known as the Cosmic Gender Bender, or the Gender Bender for short.

Characters
* Rex Nebular: Believes he is God's gift to women. Pilot and Captain of his space vessel, the Slippery Pig.

* Rox: Rex's female alter-ego. Rex becomes Rox after stepping into the Gender Bender device and has his gender "bent".

То есть используются оба слова – и «sex», и «gender». Но в игре много стёба, и, похоже, слово «gender» в смысле «пол» используется с шутливым оттенком (как и написано в Lingvo).
А вообще, я тут бегло поискал в Интернете, и, похоже, оба слова используются на равных, как синонимы. Я попытался примерно оценить, как обстоит дело с анкетами.
На слова «gender male female age» Google выдаёт примерно 2'770'000 ссылок.
На слова «sex male female age» Google выдаёт примерно 6'480'000 ссылок.
Для прояснения ситуации требуется Alex Reyst .
P. S. Возможно, это как «бордюр» в Москве и «поребрик» в Санкт-Петербурге , региональные языковые особенности.
Пётр Седов (ушёл с RSDN)
Re[4]: Как правильно, enum или bool флаг ?
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 24.12.07 03:38
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Да, но если написать правильно — Male/Female, то прочтет не "ПОЛОВАЯ_ЖИЗНЬ", а именно "ПОЛ".

По-моему, вам намекали на gender: man/woman или men/women.
Re[3]: Как правильно, enum или bool флаг ?
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 24.12.07 03:38
Оценка:
Здравствуйте, IT, Вы писали:

IT>Начнём с того, что не Sex, Gender. Но если используется bool, то по правилам хорошего наименования должно быть IsMale.

Последнее вроде бы касается getter-ов (свойств), то есть поле все же male с соответствующим ему getter-ом IsMale.
Re[6]: Как правильно, enum или bool флаг ?
От: Alex Reyst Россия  
Дата: 24.12.07 06:02
Оценка: 6 (2) :)
Здравствуйте, Пётр Седов, Вы писали:

ПС>Для прояснения ситуации требуется Alex Reyst .


В профессиональной медицинской/биологической лексике:
Sex — биологический пол.
Gender — наблюдаемый пол. Исторически — анатомически наблюдаемый, но в настоящее время слово gender все больше отвечает за такие половые различия, как поведенческие, а "ответственность" за анатомические различия постепенно переносится на тот же sex.
Тем не менее пока общепринятому, бытовому смыслу слова sex (== пол) в профессиональной медицинской лексике соответствует термин gender.
Все, что здесь сказано, может и будет использоваться против меня.
Re[2]: Как правильно, enum или bool флаг ?
От: Flying Dutchman Украина  
Дата: 24.12.07 13:36
Оценка: 10 (4)
Здравствуйте, Ромашка, Вы писали:

Р>Alexey_N пишет:

>> Вопрос такой, как же правильней и от чего это зависит ?

Р>Начнем с того, что правильно Sex, а не Male.


Р>А остальное зависит от предметной области. Как-то делал БД для

Р>буржуйских медиков, у них было штук восемь разных "полов" в справочнике.
Р> Причем "неизвестен" и "не определен" это разные сущности. Я
Р>подозреваю, с чем это связано, но вдаваться в подробности не хотелось.

В базе данных ФБР, к примеру, используются следующие значения для пола:

Мужской
Женский
Мужской, бывший женский
Женский, бывший мужской
Мужской, меняющийся на женский
Женский, меняющийся на мужской
Неизвестен
Не определен

Р>ЗЫ. По идее правильно перечисления, даже если два значения.


Да, если даже в текущий момент используются два значения, в будущем могут
добавиться новые. Если уже использовано перечисление, добавление новых
значений будет проще реализовать.
Re[2]: Как правильно, enum или bool флаг ?
От: Flying Dutchman Украина  
Дата: 24.12.07 13:45
Оценка: 51 (3)
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Alexey_N, Вы писали:


A_N>>Вопрос такой, как же правильней и от чего это зависит ?


AVK>Правильно, конечно, enum. Потому что при этом сильно лучше читаемость кода. Это во-первых. А во-вторых если завтра понадобится какой нибудь отдельный пол для транссексуалов — что будешь со своим булом делать?


A_N>>Может кто помнит, где это в стандарте прописано.


AVK>В каком стандарте?


Например, в этом: ISO/IEC 5218:2004ISO/IEC 5218:2004: Codes for the representation of human sexes
Re[2]: Как правильно, enum или bool флаг ?
От: IIY Украина  
Дата: 24.12.07 15:25
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>Enum в данной ситуации совершенно точно правильнее.

iT>Во-первых, не будет возникать вопросов, что означает true и false.

Совершенно верно! Столкнулся с таким на практике в одной из наших баз. Благо, носитель сакрального знания был под рукой.
Re[7]: Как правильно, enum или bool флаг ?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 24.12.07 15:56
Оценка:
Здравствуйте, Alex Reyst, Вы писали:

AR>Тем не менее пока общепринятому, бытовому смыслу слова sex (== пол) в профессиональной медицинской лексике соответствует термин gender.


Раньше, лет 30 назад, в анкетах использовали почти всегда sex. Но теперь чаще все таки используют gender, потому что sex считается, типа, не совсем корректным к пи... сексуальным меньшинствам.
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[3]: Как правильно, enum или bool флаг ?
От: akasoft Россия  
Дата: 24.12.07 17:08
Оценка: :)
Здравствуйте, Flying Dutchman, Вы писали:

FD>В базе данных ФБР, к примеру, используются следующие значения для пола:


FD> Мужской

FD> Женский
FD> Мужской, бывший женский
FD> Женский, бывший мужской
FD> Мужской, меняющийся на женский
FD> Женский, меняющийся на мужской
FD> Неизвестен
FD> Не определен

Вах-вах, вот откуда растут ноги у драйверов
Автор: Eugene Kilachkoff
Дата: 18.12.07
, однако.
... << RSDN@Home 1.2.0 alpha rev. 717>> SQL Express 2005
Re: Как правильно, enum или bool флаг ?
От: dshe  
Дата: 26.12.07 14:07
Оценка:
Здравствуйте, Alexey_N, Вы писали:

A_N>Вопрос такой, как же правильней и от чего это зависит ?


Как я понял по обсуждению в этой теме, большинство склоняются в сторону enum. Основной аргумент заключается в том, что в будущем может понадобится добавить новый пол, а в случае с boolean изменений в коде придется делать больше, чем в случае с enum.

На мой взгляд, если мы ожидаем неограниченное увеличение количества полов, то вариант с enum'ом будет настолько же неадекватным, насколько и вариант в boolean. Наивно полагать, что когда мы захотим добавить новый пол, нам нужно будет всего лишь добавить новую строчку в объявление enum'а. На самом деле, нам придется еще просмотреть все места где делается switch по этому enum'у для того, чтобы добавить новый case, или убедиться, что default ветка корректно обрабатывает новый случай.

В случае, если расширение полов не ведет к добалению новой логики (т.е. нет ветвлений по полам и все значения полов обрабатываются одинаково), то и вводить enum особого смысла не имеет. Как вариант, в качестве значений пола у нас могут быть даже просто строки "Male", "Female", "Other", "Unknown". Либо (для надежности и типобезопасности) экземпляры специального класса (не enum'а).
--
Дмитро
Re[2]: Как правильно, enum или bool флаг ?
От: Пётр Седов Россия  
Дата: 27.12.07 00:18
Оценка:
Здравствуйте, dshe, Вы писали:

D>Как я понял по обсуждению в этой теме, большинство склоняются в сторону enum.

Я, по крайней мере, за enum со значениями Male и Female.

D>Основной аргумент заключается в том, что в будущем может понадобится добавить новый пол, а в случае с boolean изменений в коде придется делать больше, чем в случае с enum.

По-моему, это не основной аргумент. Мой основной аргумент в том, что в данном случае (пол) enum более естественно выражает мысли программиста. bool для пола смотрится странно:

Анкета
Вы мужчина? (нужное подчеркнуть) да нет
Возраст: __

В немужском туалете засорилась канализация.
enum позволяет избежать отрицаний, а чем меньше отрицаний, тем понятнее код. Сравните
if (!UserIsMale && ...)
{
  MessageBox("Поздравляем с восьмым марта!");
}

и
if ((UserSex == Sex_Female) && ...)
{
  MessageBox("Поздравляем с восьмым марта!");
}


D>Как вариант, в качестве значений пола у нас могут быть даже просто строки "Male", "Female", "Other", "Unknown". Либо (для надежности и типобезопасности) экземпляры специального класса (не enum'а).

Насколько я знаю, в Java так сделано, там элементы enum-а – это объекты.
Пётр Седов (ушёл с RSDN)
Re[2]: Как правильно, enum или bool флаг ?
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 27.12.07 03:47
Оценка:
Здравствуйте, dshe, Вы писали:

D>Как я понял по обсуждению в этой теме, большинство склоняются в сторону enum. Основной аргумент заключается в том, что в будущем может понадобится добавить новый пол, а в случае с boolean изменений в коде придется делать больше, чем в случае с enum.

D>На мой взгляд, если мы ожидаем неограниченное увеличение количества полов, то вариант с enum'ом будет настолько же неадекватным, насколько и вариант в boolean. Наивно полагать, что когда мы захотим добавить новый пол, нам нужно будет всего лишь добавить новую строчку в объявление enum'а. На самом деле, нам придется еще просмотреть все места где делается switch по этому enum'у для того, чтобы добавить новый case, или убедиться, что default ветка корректно обрабатывает новый случай.
Только все эти места можно найти на раз, если обработку в клиентском коде делать примерно так:
for (Gender gender : Gender.values())
    switch (gender) {
        case MALE:
            //...
            break;
        case FEMALE:
            //...
            break;
        default:
            assert false : "Неизвестный пол: " + gender;
            break;
    }
В итоге, если включить все проверки внутренней корректности кода, то на этапе отладки достаточно просто найти все места, где забыли вставить логику обработки нового gender.

Это только один из вариантов. Можно и по-другому. К примеру, в Java, где перечисления могут иметь реализацию, можно поступить так... это, кстати, опровергает ваш тезис (см. выделенное в цитате).
public enum Gender {
    MALE() {
        @Override
        public Object method(Object... attributes) {
            //...
        }
    },
    FEMALE() {
        @Override
        public Object method(Object... attributes) {
            //...
        }
    };
    
    public abstract Object method(Object... attributes);
}
В итоге, при добавлении нового члена перечисления компилятор сразу попросит добавить для него реализацию специфической для него логики — метода method, а клиентский (внешний по отношению к перечислению код) практически и не заметит изменений, если будет работать с перечислениями с помощью метода method. Этот вариант более красивый, так как логика не размазывается по клиентскому коду, а собрана в перечислении.

D>В случае, если расширение полов не ведет к добалению новой логики (т.е. нет ветвлений по полам и все значения полов обрабатываются одинаково), то и вводить enum особого смысла не имеет. Как вариант, в качестве значений пола у нас могут быть даже просто строки "Male", "Female", "Other", "Unknown". Либо (для надежности и типобезопасности) экземпляры специального класса (не enum'а).

Как понял, весь разговор именно и идет о том, что логика такая необходима.
Re[3]: Как правильно, enum или bool флаг ?
От: jazzer Россия Skype: enerjazzer
Дата: 30.01.08 08:44
Оценка:
Здравствуйте, Flying Dutchman, Вы писали:

FD>Например, в этом: ISO/IEC 5218:2004ISO/IEC 5218:2004: Codes for the representation of human sexes


Что характерно, в русских названиях полов есть ошибка
Интересно, Россия и за этот документ тоже проголосовала "за без поправок"?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.