toshizooooooo 2012-08-14 05:27:05

[Java] 内部的にunicodeだから日本語つかえるけど・・・いくら英語苦手だからって・・・ このエントリーをはてなブックマークに追加

投稿者からのアピールポイント

これを書いた先輩に「英語で書きましょうよ!」と言ったら、「頭が固い」と一蹴された。そういうことじゃない。 ちなみに先輩はこれをコードアシストの無いただのテキストエディタで、日本語入力を巧みにon/offしてコーディングしているから、ある意味すごい。

class 会員 {
    private int 会員番号;
    private String 名前;

    public int get会員番号 () {
        return this.会員番号;
    }

    public String get名前() {
        return this.名前;
    }

    public void 入会する() {
        ....
    }

    public boolean 会員状態をチェックする() {
        ....
    }

    ....
}

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント(82)

#1 ZeroP2525 2012-08-14 07:11:01  

和英混在入力モード(ローマ字入力中かなに変換せず変換キーで一気に変換)にしておくとこういうのは比較的らくに打てるよ

#2 masanobuimai 2012-08-14 08:26:45  

別に悪いと思わない。:-P

#4 tehe819 2012-08-14 08:43:35  

VBAでも見られる光景。

#5 matarillo 2012-08-14 09:25:03  

日本語使ってもいいと思うけど、その時はパスカル/キャメルに関する標準的な命名規約を適用できないんで、ガラパゴス規約をさらに重ねないと不便かも。プライベートメンバにはアンスコつけるとか、そういうたぐいの。

#6 calc3 2012-08-14 09:57:47  

英語だかローマ字だかわからんクソみたいな変数名付けられるよりマシだからコード中に日本語使える言語だとむしろ推奨してるな。 あと「会員状態をチェックする」みたいにちゃんと「てにをは」をつけてるのは素晴らしい。漢字の羅列で呪文みたいになってるのはクソ。

#7 migimatsu 2012-08-14 13:22:30  

あえてヘンだとは思わないし、動作メソッドなどは可読性もいいが、なぜそんなにゲッターセッターわざわざ作って、頑に get/set つけたがるのか。目的を考えよう。

#8 theloyaltouch 2012-08-14 13:42:23  

予約後にも非ASCII文字が使えないものか、と、lambdaという予約後を持つ言語を使うたびに思う

#9 theloyaltouch 2012-08-14 13:42:28  

予約後にも非ASCII文字が使えないものか、と、lambdaという予約後を持つ言語を使うたびに思う

#10 oasynnoum 2012-08-14 14:54:46  

これはむしろあり。

#11 Link_Orw 2012-08-14 15:04:11  

IPAの資格持ってるだけのクソに多そうなコードだ。 移植性を考慮してない。

#12 Link_Orw 2012-08-14 15:04:19  

IPAの資格持ってるだけのクソに多そうなコードだ。 移植性を考慮してない。

#13 oe_roel 2012-08-14 15:15:02  

get/set はJavaBean の規約で、無いとリフレクションが辛くなるので、つけているのかな。 あえて突っ込むとしたら、会員状態ってなんだってのと、会員状態である() ってほうが個人的にはしっくりくる、というかそれならis会員状態とかになるのか、とか想像が止まらない。

#14 kagami__ 2012-08-14 16:34:27  

boolean なんだから、どっちであるかをはっきりさせないと。会員番号持ってたりするし、状態ではなく「isプレミアム会員」あたりじゃないの?

#15 juangotoh 2012-08-14 16:46:14  

いっそすがすがしいけど、get会員番号 ()はなあ… アクセッサにはgetつけないと社内規約なり開発環境の支援機能の都合なりでなんかマズイことが起こるんだろうけど。アクセッサ関数名には頭に「get/set」をつけるか、もしくは末尾に「取得/設定」をつける、とか規約変えてからやればいいんじゃない?

#16 juangotoh 2012-08-14 16:46:25  

いっそすがすがしいけど、get会員番号 ()はなあ… アクセッサにはgetつけないと社内規約なり開発環境の支援機能の都合なりでなんかマズイことが起こるんだろうけど。アクセッサ関数名には頭に「get/set」をつけるか、もしくは末尾に「取得/設定」をつける、とか規約変えてからやればいいんじゃない?

#17 math_neko 2012-08-14 18:14:12  

いくら Java が 2 バイト文字 OK だからってこれはない

#18 holybell9999 2012-08-14 19:12:44  

「あり」って意見が意外と多いのに驚く。 信じられない。 開発現場の違いなのかなぁ・・・。

#21 takakiyo 2012-08-14 22:45:14  

メソッドやフィールドに非ASCII名は場合によってはあり。が,パッケージ名やクラス名はASCII限定にするべき。Javaの仕様では,これらはディレクトリ名やファイル名と密接に結びついている。異なるOS・ファイルシステム間で非ASCIIファイル名を交換するのはトラブルのもと。

#22 fgtsystems 2012-08-14 23:04:13  

某社のフレームワークだとDB定義書から勝手に日本語変数とか生成してくれたりするんだよなぁ・・・・(遠い目)

#23 sindoguest1 2012-08-15 01:12:53  

全角スペースとか長音と全角ハイフンとかちゃんと区別する、間違えない、を克服できればアリ。たいてい克服できないけど。非ASCIIと言う点ではFORTH系がフリーダム。

#24 Fantom_JAC 2012-08-15 04:30:51  

こういうのアリって言う人、動けばいいって考え方なのかな。

#25 imai141421356 2012-08-15 06:00:58  

ないわー。

#26 _nabbe 2012-08-15 08:16:52  

これ、ファイルとしては 会員.java で、コンパイルすると 会員.class ができるのか。そう思うとスゴイな。Windows - Linux間で移行したときにファイル名が化けて爆死しそうである。

#27 PlayTrueName 2012-08-15 12:05:44  

(:])『 文字化けよりもファイルサイズの無駄な増大が問題だね~

#28 poad1010 2012-08-15 12:51:30  

日本語Classとか使うと、ビルド環境と実行環境が別OSの場合、ビルドは通るがClassNotFoundExceptionになったりするから、迂闊に使うと痛い目に合う。

#29 smotokezuru 2012-08-15 13:48:34  

テストコードなら普通だけど

#30 Temarin_PITA 2012-08-15 14:48:08  

全角文字をシンボル名には使わないとしてるけど、動作に影響が無ければアリ。

#31 keihanna 2012-08-15 15:34:10  

アリ。識別子が英語でなければならない絶対的な理由はない。国内限定なら、日本語(漢字)の方が可読性は高い。変換がメンドウという意見はあるだろうけど、書くときの苦労よりも、後で読むときの苦労を減らした方が幸せ。

#33 jpl_produire 2012-08-15 16:27:24  

日本語プログラミング言語を使おう!

#34 customX_156 2012-08-15 18:45:12  

日本語で問題がないことが充分に検証されているならあり。でも、何も自分が人柱になることはないと思う。 インテリセンスとか働かなくて結局イライラしそうだし、ファイル名はアスキーじゃないと危険。命名規則も先人にならうことが出来なくなる。 予約語は混じるわスペース区切りは日本語に合わないわで、結局可読性が本当にあがるとはちょっと思えない。

#35 shimy_net 2012-08-16 03:17:46  

テストクラスに日本語を使ってますわ。実装クラスには使ったことないけど。

#36 pmint 2012-08-18 07:57:27  

臭うコメントにもunkodeを付けられないと片手落ちだな。

なにが臭うかって「プログラマーのくせに考えずに良し悪しを論じていること」 不都合があるなら何がまずいのかくらい考えないと。 「文字に統一感がなくなる」と言いつつ統一感のないカラフルな文字でコード書いてたり。

昔の「1つの関数は1画面32行まで」みたいな作法。 今だけしか通用しない小手先ルールを後に残るコードに使わないでね。

#37 hardtimes777 2012-08-21 06:06:00  

現状”なし”だけど、理想的なんじゃ?開発メンバーが日本人だけなら。

#38 math_neko 2012-08-21 06:12:05  

これ単品だけ出されても「動くからいいんじゃね ?」って言う人続出しそうだな。これがたとえば Bean とかで、Web アプリケーションで使うことを想定してるなら getter/setter が正しく動作する保証はどこにある ? その意味でも変数名・メソッド名にマルチバイト文字を使うことがいかに危険かわかると思うんだが。

そんなに日本語でプログラミングしたいなら「ひまわり」か「なでしこ」でも使ってろってこった。

#39 k5n6 2012-08-21 09:56:38  

DBだけど某所でアンケートしたら、日本語のカラム名使うって人多かったよ。 更に対応するクラスのプロパティ名も同じく日本語使うって人多かったよ。 これは.NET界隈の話だけど。Javaならなしだよね。

#40 Verna_Velna 2012-08-22 01:15:30  

実行時のファイルにマルチバイトが残っちゃうから、マルチバイト非対応のOSで動かない可能性があるのは javaとしては排除したい案件かも。

#41 math_neko 2012-08-22 05:07:33  

DB 側ならば日本語テーブル名や日本語カラム名はあってもいいのかもしれない。CakePHP とか RoR とかじゃないんなら動かせるし、顧客がそれを望むならそうするべきだと思う。ただソース側で変数名やメソッド名に日本語はやはりやっちゃいかんと思う。

#42 token7 2012-08-22 11:52:36  

ああ、仮にウチの部署がどんだけブラックであっても、マルチバイトを成果物に入れるのに躊躇いを感じないような ウンコ メンバーで構成されていない事は、不幸中の幸いだ。 ウンコ メンバーが居たら、ウチの部署はきっと、闇より暗かったさ。

#43 sindoguest1 2012-08-23 03:08:35  

ケーキが食べれないならコメントやドキュメントからも日本語排除しちゃえばいいじゃない。

#44 enabledbrain 2012-08-24 16:50:27  

ぴゅう太を彷彿とさせるね

#45 Ukai_H 2012-08-29 22:52:05  

これはJava言語の正しい使い方。これが動かないウェブアプリのフレームワークなり周辺ツールがあれば、それはそれらのバグ。 論理的に考えるならば、Javaの言語仕様がマルチバイト文字の名前を認めている以上、getter/setterが正しく動く保証とはJavaの言語仕様に他ならず、ウンコなのは動かないフレームワークやツールの方。

#46 InternalServerE 2012-08-29 23:58:44  

あまり真面目に検証したことないので推論だけれど、上の諸氏は、Javaネイティブのクラスローダが、クラス名のプラットフォーム依存に対応してない、と言ってるんじゃないの。

#47 InternalServerE 2012-08-30 00:04:22  

あと、これはこちらのミスリーだったら申し訳ないんだけど、「出来ること」と「やってよいこと」と「すべきこと」を繋げて議論するのはあまり好きくない。全部違う話題なので。

#48 Ukai_H 2012-08-30 02:59:46  

Java言語でマルチバイト文字を名前に使って、どんな実害があるの?ファイルシステムがマルチバイト文字を通さない場合だけのはず。 で、あなたがたのプログラムは本当にそんなプラットフォームで動かさないといけないの?動かすことがあるの? これは、「出来ること」で「やってもよいこと」。プロジェクトの規約で決めればいいだけ。 さらにテーブル名やカラム名が日本語で設計されていて、Beanのgetter/setterまで自動生成するとかフィールド名とカラム名を一致させるという設計方針ならば、むしろ「すべき」でさえある。 なにがなんでもマルチバイト文字は成果物にいれちゃだめなんてのは、今時あまりに盲目的。どうせコメントや文字列には日本語書くんでしょ?

#49 InternalServerE 2012-08-30 10:54:25  

おや、長文ありがとう。こんなところで真面目な議論に花を咲かせる気はないから答えないけど、こちらの言葉のニュアンスが期待通り伝わってないんだなぁ、という点がちょっと残念。まぁ、自分の文章力の問題なんだろうね。うん、そうなんだろう。
「貴方が踏むまで」はなかなか気づかれないもんだが、ウンコってのは道端のあちこちに落ちてるもんだ。解釈はご自由に。

#50 Ukai_H 2012-08-30 22:50:14  

ぼくの言いたいのは、「なんで、どういう場合にマルチバイト文字の名前がいけないのか」ほんとにちゃんと考えてる?調べてる?理解してる?ってことなんだけどね。こういう思考停止は「定数に切り出せ」と言われて「ONE=1」ってやるのと同レベル。そういう意味ではよりウンコを踏みそうなのはあなたの方かもね。クラスローダの挙動を詳しく調べれば、ぼくが前のコメントで言っていた意味がわかると思うよ。

#51 math_neko 2012-08-31 09:19:34  

個人の趣味を持ち込まないでくれるかな。たとえ動くからと言って、こんなコードを規約で認める現場があるとおもう ?

#52 math_neko 2012-08-31 09:22:45  

あと、「これで動かなかったらフレームワークやツールの方がウンコ」って言ってるけど、じゃあ例えばこれが Struts で動かなかったらあなたは Apache に「このウンコが !」って言うわけですね ?

#53 InternalServerE 2012-08-31 14:49:47  

まぁ、この程度の話題でいがみ合っても仕方ない。世の中いろんな価値観の人がいるよね、ってことでいいんでないの。
Ukai_Hさんって若い人なんだろうなぁ、と勝手に想像してしまった。学生の頃の自分の発想とそっくりなんだもの。
そう考えると、自分も場数を踏んで、だいぶん濁ってしまったなぁ、と思う。いい意味でも、悪い意味でも。

#54 rwest2112 2012-11-09 17:56:36  

コードを海外に出す可能性がある場合を除けば、筋論としてはこれを否定するのはやはり思考停止だな。実用的にはライブラリやツールのバグを踏むリスクとのトレードオフ。

#55 rwest2112 2012-11-09 18:31:36  

仕様書大事っていう人で、これがウンコっていう人は、もちろん仕様書も英語だよね? ;P

#56 k1468 2012-12-21 23:51:22  

日本国内で使用する。エディタ側で色分けされている。という条件が付けばアリだと思うけど、これがもしアラビア語とか中国語、韓国語とかで書かれていたらと思うと死ぬ。そーいうのはコメントだけにしといてお願い。

#57 okadabasso 2012-12-24 03:55:37  

get/setはbean仕様に沿ったものだろう。使えるなら使えばいいと思うが入会する()と会員状態をチェックする()は名前がアレだと思う。

#58 b1061721rmqkrne 2013-01-11 12:06:22  

Javaがコンパイルエラーにしないのが悪いの?

#59 token7 2013-01-13 01:47:47  

悪いのは、マルチバイト変数名なんてコーティング習慣が世間一般では少数派だって事だね。ウンコが考を労しようが、その点から保守性の低さが指摘されて、それを覆せない妥当な理由を見つけられない。生産性と保守性を落とすコードはどんな理由があろうと、ウンコに変わりないんだからね。

#60 token7 2013-01-13 01:50:12  

覆せない、妥当な理由を見つけられない。だな。

#61 tacticsrealize 2013-04-14 12:08:48  

統計学とかのよくわからない専門用語の英語とかが出てくるならアリだと思う。 あとリフレクションを使ってExcelみたいにユーザーが入力したマクロをコンパイルしてメソッドを呼び出す機能を実装するとかならこれでいいと思う。 (自分はこのモジュール使いたくないけど)

#62 17_daiki 2013-05-11 08:48:31  

さすにないだろ~ もしやるならもっと徹底しろし

#63 Tsuchinoko7Jp 2013-05-11 15:01:29  

単純に読み難いし、ファイル名が 会員.java となると扱いづらいな。 (あと、入会する() はこのクラスにはいらない)

#64 Hikaru_oao 2013-08-07 22:52:01  

徹底できるのなら有り

#65 yuu_hara 2013-09-24 07:10:40  

テストケースならありだと思う。それ以外だとなしかな…

#66 _oinarisan_ 2013-10-17 22:56:41  

ロジック側で日本語は絶対に使わないけどテストケースのメソッド名は日本語にするかなー 「AのBがCの時Dであることを確認する」とかいちいち英語にすんの面倒くさいから

#67 harunoshirayuki 2013-12-03 15:07:24  

ひどいとは思うけれど英語名を付けずにローマ字名をつけるよりはこっちの方が潔くて好きだわ。

#68 calc3 2014-06-28 06:14:53  

一部誤解してる人がいるようだけどJavaは識別子にUnicode文字を使っていいと仕様書に明記してあるから識別子に漢字を使うのは言語仕様上何ら問題ない。 よくある「仕様外だけど処理系の動作上たまたま日本語が通っちゃう」という話とは分けて考えたほうがいい。

#69 m9afK09v 2014-07-24 05:11:50  

そのUnicodeで定義が変わることがあるよ。そうすると識別子に使っても良い文字が自動的に変わるよ。

#70 komamonodaisuki 2015-03-14 07:28:36  

入会する()で吹いたわwwww

#71 toshiyuki_san 2015-12-15 02:15:30  

動くか動かないかどうかよりも、日本語はコメントで書けばいいと思う。

#72 doscoy33 2016-06-15 04:32:44  

いや否定してる奴らプログラミング言語が何のためにあるのかとか、考えたことも無いんやね。

#73 doscoy33 2016-06-15 04:32:45  

いや否定してる奴らプログラミング言語が何のためにあるのかとか、考えたことも無いんやね。

#74 doscoy33 2016-06-15 04:32:52  

いや否定してる奴らプログラミング言語が何のためにあるのかとか、考えたことも無いんやね。

#75 mznz_ 2016-06-18 11:48:40  

実用上ではエディタの補完機能が使いにくくなるというのと(get会員番号じゃなくてgetIDならエディタによってはgidなどと入力すれば補完できる)、 日本語の識別子のための規約や慣習なんてものが殆ど無いから識別子の恣意性が増す(「に」と「へ」や「が」と「は」の使い分けを一々規約で定めるのか?)というのも一応あるよなあ。

#78 KasaiNoy 2017-02-23 21:35:43  

こういうのが鬼のようにあるので英語にされるとコメントだらけになってしまう。 public flort 低温割れ防止限界予熱温度(flort 溶着金属拡散性水素量 ...

#79 setouchi_kogyo 2017-03-22 04:44:29  

SQLかと思った

#80 kyu_ishii 2017-05-20 17:55:50  

Java 1.0.2 のころの Symantec VisualCafe のサンプルコードにこんなのあったよ。 ちなみに当時のSunのJavacではエラーとなった。

#81 snags17 2018-09-25 15:38:13  

短いサンプルコードとか、命名規約で変数かつ名詞のみに限るとか決まっていれば、まあ。

#82 hako584 2018-11-08 05:52:35  

程度問題だけどさー。上で 低温割れ防止限界予熱温度 とか書いてる人もいるけど

  1. 可能かどうか(問題なく動作するか)
    2012年当時でも.NET環境は問題なく、Javaは問題ある可能性があった…?
  2. やってよいか(規約適合・当然の推論として)
    国際化前提ならNG、規約違反はNG。
    平易自明な英単語(上例なら 会員Member とか)はNG。入力切替の手間や一般慣習に反する。
  3. すべきか
    平易自明な英単語が無いことが自明な場合、その表現と頻度によってはすべき。
    てかドメドメなSIなんて仕事の8割そうなんじゃ…。
    例えば警察用の日報アプリを仕事で作ってるときに
    職務質問 のclassなりが必要なときに Question とか Interrogation とかはまだ頑張れる。
    でも 道交法適合 とか 酒酔い酒気帯び飲酒検知拒否 とかの定訳も無いものを個別に訳していくか?費用対効果は?その訳は正しいのか?訳の正しさもプログラマが保証するのか?

とかとか考えたら、 1, 2 の条件さえパスして必要性があるなら、日本語使うこと自体を拒否する理由無いとは思うよ。2012年当時はまだマルチバイト処理が適当で実行環境によってエラーになった頃の名残が強かったけど。

コメント投稿には、twitter認証が必要です。

Twitter認証

このウンコードに臭った人は、こちらのウンコードにも臭ってます

[Java] is禁止令

このエントリーをはてなブックマークに追加

ウンコードの趣旨とは違い、レビューで指摘...

// Mod yamada Start

// 一般的に考えて真偽値を返すメ...

鑑賞する »

[C] すげーちゃんと動く!

このエントリーをはてなブックマークに追加

結合試験2日前に脱退したうんkプログラマ...

return 0;

鑑賞する »

[その他] HOW TO ABC..

このエントリーをはてなブックマークに追加

実際にあった某システムの超重要なマスター...

create table item_master (
 A varchar(2...

鑑賞する »