「性別」を表す変数名をアレにするのやめませんか?

こんにちは。

プログラマーあるあるだと思うのですが、人物を表すクラスなどをしばしば以下のように定義すると思います。

typedef _Person {
    char* name;  //名前
    int age;     //年齢
    int sex;     //性別 (0:男性 1:女性) <=== 恥ずかしい (><)
} Person;

 (※言語は何でもいいんですけど、とりあえず C で記述します)

「性別」って辞書で調べると「sex」って出てくるので、おおそうかとばかりにこれを変数名にしているコードが実に多いです。

いや間違いではないし、むしろ正しいのですが、個人的にはなんか恥ずかしくてどうしてもやりたくありません。

「sex = 1;」とか書きたくない。

「sex が 0 のとき・・・」とか読みたくない。

セクハラ認定されそう。

などなど不安でたまりせん。

そこで代案をいくつかあげましたのでプログラマーの皆さんにおかれては、今後そのようなコードを記述する際にはご検討ください。

代案1:そこだけローマ字にする

ぐぐってみると以下のようなコードを使っているサイトがありました。

typedef _Person {
    char* name;   //名前
    int age;      //年齢
    int seibetsu; //性別 (0:男性 1:女性) <===
} Person;

個人的には「これは無い」と思いますが、例の単語を使うよりはましな気もしました。しかしおすすめではありません。自分がコードレビューワーなら却下したいところです。

代案2:”gender” に置き換える

個人的なおすすめはこれ。”sex” という単語の代わりに “gender” (ジェンダー)と言う単語を使う方法です。ロジックはそのままなので簡単ですね。ちなみに weblio 様のサイトによると gender の意味は次の通り。

gender【名詞】
1【文法】 性.
2《口語》 (人の)性,性別,ジェンダー 《社会的,文化的意味づけをされた男女の差異》.

[weblio – http://ejje.weblio.jp/content/gender]

いろいろ調べてみると、gender は sex よりも「社会的な性」という意味で使われることが多いとか書かれてたりしますが、Wikipedia 様の「Sex and gender distinction」(2015年10月18日閲覧)という記事によると婉曲表現うんぬんとの解説があるので、今回の目的にも使えると思います。っていうか、自分は使います。

typedef _Person {
    char* name;   //名前
    int age;      //年齢
    int gender;   //性別 (0:男性 1:女性) <===
} Person;

「ジェンダーが0のとき〜」とか自然に読めます。やった!

代案3:男性であるかどうかのフラグに置き換える

これもいい方法です。「性別」ではなく「男性かどうか」のフラグに置き換える方法です。

typedef _Person {
    char* name;   //名前
    int age;      //年齢
    BOOL isMale;  //性別 (TRUE:男性 FALSE:女性) <===
} Person;

但し、こうすると「男性でも女性でもない」状態が表現できなくなります。それが必要な場面はそれほど多くはないと思いますが、昔自分がかかわった医療機器のコードでは、性別は「男性、女性、不明」と3つの値が取れるように定義されてました。

この方法にはもう1つ心配な点があります。それは「なんで真の時に男性を表すのですか?これは男尊女卑的ではないですか?」というクレームがどこからともなく来そうな予感がするところです。

それに備えてコードを以下の様にしておけばスキはありません。

typedef _Person {
    char* name;    //名前
    int age;       //年齢
    BOOL isFemale; //性別 (TRUE:女性 FALSE:男性) <===
} Person;

これなら真のときに女性を表すので妙なつっこみもできそうにないですね!

以上、真面目な提案なのでよろしくお願いいたします。

2 comments

  • sex で良いと思います。
    少なくとも male female を利用するのであれば、genderはおかしいと思います。genderを利用するのであれば、man, woman の利用が好ましいと感じます。sexは別にいかがわしい単語ではなく、確りとした意味を持つ単語です。
    また、sexとgenderは同じような性の意味を持ちますが、決して等価ではありません。単語の意味に応じて使い分ければ良いと思います。
    過剰に反応せず、単語の意味を確り理解すれば自信を持って利用できると思います。

    ちょっと変な喩えですが、日本語で言うと「置換」が厭らしい言葉だから使うことを控えましょう。という感じでしょうか?
    痴漢とよみが同じですが、文脈を考えれば間違えることはありません。置換という単語を知らない方は痴漢として反応することがありますが、当然文脈に合わないため、単語の意味を聞いてきます。つまり痴漢として間違うことはあまり無いのではないでしょうか。

  • 視野を広く持ちたい人

    国際基準(ISO 5218)では項目名がsexを想定しているので
    一般的には国際基準に従うのが望ましいのではないでしょうか。

    もちろんその項目の意味が社会的性別を表している等であれば別ですが、
    恥ずかしいという理由で変えたいのであれば、
    国際基準で決まっていますよという理論武装することをお勧めします。

    遅レス失礼しました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です