パスワードを忘れた? アカウント作成

こちらは、zero_bitさんのユーザページですよ。 最新から新しい日記やタレこみを確認できますよ。

245865 comment

コメント: Re:楽勝です (スコア 1) 138

このトピックへの返信はこれで最後にします。

●「eq」というメソッド名について

> 挙げられてる例はどれもクエリの組み立てなんかに使うもので、

SAStrutsのeqは内容の一致を表すので、同値比較ですよ。
また、制約ソルバや抽象構文木の同値比較ノードの場合、
意味的には同じことではないでしょうか。
(操作をデータとして表しただけなので)

それとも、返値の型がbooleanでオブジェクト間の同値比較を行う
メソッド以外は全部別物扱いということでしょうか?
そうだとしたら、問題設定自体に無理があります。
2つのObjectを引数にとるstaticメソッドの同値比較は
標準APIに存在せず、個々の開発者が自作しているはずです。
(つまり、どの慣習のことも支持しない)

また、rhsだけを取るインスタンスメソッドが「equals」なのは
慣習ではなく仕様なので、慣習が使われる余地はありません。

仕様で決まっていないメソッド名を、どの慣習に従って付けるか、
という話ですよね?

> 同値比較メソッドの名前が「eq」と「equals」のどちらが一般的ってのは、

どちらがより一般的かを決める必要は無いんですよ。
二つの慣習が併存する場合もありますので。
(一つのソースコードツリー内では統一すべきですが)

別の言い方をすると、ある慣習を使うか使わないかは、
どの慣習の使用数が一位かを決めるという話ではないのです。

> 繰り返しにしかなりませんが、
> 同値比較メソッドの名前をeqとする慣習はありません。

上で書いたように、前回挙げた例が慣習の例になっていると思います。

●なぜ「eq」のような慣習がJavaにも入ってきているのか

以下は私の個人的な意見ですが。

Javaが作られた時代は、意味不明な省略形が横行していた暗黒時代でした。
Javaの長く説明的な名前はそれを解消し、名前付けの重要性を示しました。

一方で、Javaも既に15年近く経過し、コード量の多さを批判されるように
なりました。
(Web開発ではしばらく前に、大真面目にRubyと比較されていました)
いくつか根拠が挙げられていますが、その一つが説明的なメソッド名です。

通常のメソッドには説明的な名前が必要ですが、極めて高頻度に使用され、
かつ一般的なメソッドだけは、短くすべきではないか、と考える人がいる
ということだと思います。
(どうせ暗記して使うので)
例えば「int」が「integer」ではないからといって、分かりにくいと思う
人はいないでしょう。

慣習というのは、良いと思う人は使い、使う人が増えれば一般的になります。

新しく、生産性を上げようとするフレームワークで「eq」のような名前が
採用されているということは、その慣習がJavaの文化にも入ってきている
最中なのでしょう。
さらに多くのフレームワークやライブラリで採用され、
より一般的になれば、いずれ違和感は感じなくなると思います。

他の言語の文化から慣習が入ってくるのを「今までのJavaと違う」
というだけで拒否し続けると、改善が見込めなくなるのではないでしょうか。

# 昔のJava文化なら「ge」は「isGreaterThanOrEquals」としたでしょう。

●なぜ「くだらない」と言われるのかについて

私が思うに、命名規則の話をするのがくだらないと言われている
わけではないと思います。

> 特に違和感はないです。

結局のところ、これに尽きるのではないでしょうか。
自分自身が見慣れているか否かという話になっている点です。
他の方々は、色々経験すれば変わると思い、経験の代わりに
各自のC++などでの経験談を伝えてくれているのだと思います。

●その他

> ましてや、あんな基礎的なNullPointerExceptionの防ぎ方を「参考になる」とするような
> 初心者に提示するサンプルコードとしては不適切としかいいようがない。

最初からプログラマ向けのスレッドなので、
皆さんプログラミング自体の初心者ではないでしょう。
(スラドには猛者も多いです)
おそらく「Javaでは」どうなのかが参考になったのでは。
(件のコードのメソッド名はもう少しで「hoge」になるところでした)
245008 comment

コメント: Re:楽勝です (スコア 1) 138

> 「Java以外の慣習を持ち込むな」
ではJavaに絞って、現状を書いてみますね。
(URLを減らせと叱られたので減らしました)

●変数名「lhs」と「rhs」について

まずlhsやrhsという表現は、C++など特定の言語によらず、
二項演算子のオペランドを表すために使われる、
プログラミング一般の略語です。
Javaに限っても、標準APIで特に断りなく使われています。

一例 (変数名は英語版も同じ)
http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/font/FontRenderContext.html
http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/font/TransformAttribute.html
http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/font/class-use/ImageGraphicAttribute.html
http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/geom/Area.html
http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/class-use/Object.html
http://java.sun.com/javase/ja/6/docs/ja/api/javax/xml/datatype/Duration.html

●メソッド名「eq」について

こちらは「lhs」と「rhs」ほど一般的では無いですが、
標準APIだと「javax.management.Query」で使用されています。

http://java.sun.com/javase/ja/6/docs/ja/api/javax/management/Query.html

また、Java EEでも以下のように使用されています。
(こちらは定数名で大文字)

http://download.oracle.com/javaee/5/api/javax/mail/search/ComparisonTerm.html
http://download.oracle.com/javaee/5/api/javax/mail/search/ReceivedDateTerm.html
http://download.oracle.com/javaee/5/api/javax/mail/search/IntegerComparisonTerm.html

また、#1807054の一番上で挙げた
SAStrutsは、Javaの代表的なフレームワークの一つです。

他には、Seasarでも。
http://s2container.seasar.org/2.4/s2-tiger/ja/apidocs/org/seasar/extension/jdbc/where/condition/NotNullableCondition.html

「eq」「ne」「gt」「ge」「lt」「le」の6つは様々な言語やライブラリで使われてきた経緯から、
「==」「!=」「>」「>=」「<」「<=」の代わりとして様々な言語やライブラリで使用されています。
(おそらく今後開発されるものでも)
こちらも特定の言語に限らない慣習なので、覚えておいて損は無いでしょう。

●「参考になる」モデについて

元がオブジェクトの同一性と同値性のトピックだったので、
#1806790に対するモデはNullPointerExceptionの防ぎ方に対してでしょう。
(命名規則に対してではない)

●その他

> Javaの標準APIや、まともなフレームワークのAPIは、Javaのスタイルで命名されています。
ということであれば、lhsもrhsもeqも、Javaのスタイルということになりますね。

> Effective Java 第2版 (項目56 一般的に受け入れられている命名規約を守る)
また、この項の最後には「『長く維持されてきた慣用的な用法が別に規定している場合、
これらの規約に盲目的に従うべきではない。』ということです。常識を働かせてください。」
とも書いてあります。

> どこの馬の骨とも分からないようなAC
ACだと他の投稿を読めないのが残念ですね。
これだけコードにこだわりがあれば、面白いものを読めそうですが。

以下は老婆心ですが。
JavaのAPIも含め技術というのは広いもので、プログラマー一人の経験はそのごく一部です。
自身の狭い経験に含まれないものは一般的では無いと決めつけ、
調べもせずに批判、それも個人攻撃をしていては、知識を広げる機会を失います。
引退すべき「ベテランプログラマー」はそうして誕生するのではないでしょうか。

既にオフトピ気味ですが、まだまだ引退する気は無いのでID。

244774 comment

コメント: Re:楽勝です (スコア 1) 138

引数名については#1806916でご指摘いただいた通りです。
また「str1」だと「str」なのは型を見れば分かりますし、
「value」なのは自明なので、追加情報としては役に立たない。
省略が嫌な場合には「left」と「right」などいかがでしょう。

ところで「eq」という名前も慣習で色々と使われていまして、
ちょっと調べてみました。
(「Java以外の慣習を持ち込むな」と言われればそれまでですが)
一覧 (もちろん不完全) を貼っておきます。

実際の開発で使用する関数を書く場合には
他の言語の慣習を持ち込むのと「オレ省略」の境目は難しいですが、
チーム内で了解が得られていれば問題無いかと。

========== 一覧ここから ==========

SAStruts (検索条件)
http://www19.atpages.jp/~taipeimaomao/pukiwikiplus/index.php?SAStruts%A4%A2%A4%EC%A4%B3%A4%EC%2F%A5%BF%A5%A4%A5%D7%A5%BB%A1%BC%A5%D5%CD%D1%A4%CE%B1%E9%BB%BB%BB%D2%A5%E1%A5%BD%A5%C3%A5%C9%A4%DE%A4%C8%A4%E1

Python (operatorモジュールの関数, 同値性)
http://pythonjp.sourceforge.jp/dev/library/operator.html

Perl (文字列の同値性)
http://www.rfs.jp/sb/perl/02/03.html

Haskell (クラス名, 同値性)
http://www.sampou.org/haskell/tutorial-j/classes.html

ActionScript (文字列の同値性)
http://nsflash.com/action/action0136.html

bash (-eq, 数値の同値性)
http://www.c.csce.kyushu-u.ac.jp/~seiichirou/wiki/index.php?bash%2Cawk%2Csed

FORTRAN (同値性, .eq.)
http://windom.phys.hirosaki-u.ac.jp/~kasai/wiki.cgi/su04?page=FORTRAN%A4%CE%B4%F0%CB%DC%A1%A7%A4%DE%A4%C8%A4%E14

Common Lisp (同一性)
http://www.iba.k.u-tokyo.ac.jp/~iba/C/lisp.html

Scheme (同一性, eq?)
http://en.wikipedia.org/wiki/Scheme_(programming_language)

PowerPCアセンブリ (同値性)
http://www.ibm.com/developerworks/jp/linux/library/l-powasm3.html

jQuery (一致)
http://f32.aaa.livedoor.jp/~azusa/?t=ajax&p=jquery_core_object_accessors#a_jquery_core_eq

244590 comment

コメント: Re:楽勝です (スコア 2, 参考になる) 138

それだけだとaがnullの場合にNullPointerExceptionを投げるので、
以下のようにする場合もあります。

if((a == null) ? (b == null) : a.equals(b)) {...}

あるいは、こういうのを定義しておいて、
public static boolean eq(Object lhs, Object rhs) {
        return (lhs == null) ? (rhs == null) : lhs.equals(rhs);
}

こうするとか。
if(eq(a, b)) {...}

212839 comment

コメント: Re:カモメはカモメ、開発者は経営者になれない。 (スコア 1) 82

by zero_bit (#1751779) ネタ元: Linux カーネル開発者の高齢化が進んでいる

> それに「手を引いて引率する」事まで彼らに望むのは酷だと思われ。
↑これ↑を↓こう↓書き換えてみたら、どうでしょう。
それに手を引いて引率する事まで「彼らに」望むのは酷だと思われ。

インテルやIBMでも、開発者が経営者を兼務しているわけでは
ないですよね。
能力的に両方できたとしても、時間が足りなくなるでしょうし。

問題なのは、Linux開発陣が引率しないことではなく、
開発者以外の引率するような役割の人達が参加していないことでは。
(言いたいことは#1751415の方と同じです)

コアな部分は本人達に解説してもらうしかないとしても、
解説の場を用意することまで本人達にさせるのは酷でしょう。

166179 comment

コメント: 遅延評価 (スコア 1) 110

人間が書いたカレンダーなら、無限に続くのは「現在も書き続けている」
場合だけでしょう。
マヤの人達がいなくなってしまったら、そうはならないというだけでは。
誰かが読もうとした瞬間に先回りしてその部分を書くシステムがあれば、
「終わりが無い && 手書きの」カレンダーでもできるかもしれませんが。
164545 comment

コメント: 評価する側の構成員も問題では? (スコア 1) 293

事業仕分けの中継も見ずにコメントするので、
外しているかもしれませんが。

評価する側の構成員を見ると、研究の有用性を
理解できる人員はほとんどいないのではないか、
と思います。

スパコンの必要性の評価は第3WG
http://www.cao.go.jp/sasshin/kaigi/honkaigi/d2/pdf/s1-3.pdf

マスコミが流す批判的なコメントは時間が短いというものばかりですが、
経済・法律の出身者に偏っており理学工学の出身者が少なすぎるのでは。
typodupeerror

犯人はmoriwaka -- Anonymous Coward

読み込み中...