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

bsS001_megane0120140830145829

こんにちは。

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

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;

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

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

スポンサーリンク


コメントを残す

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