ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

コメント不要論の補足

2011-11-21 22:02:38 | プログラミング

コメント不要論の部分、言葉足らずでまとまりを欠いている気がするので、ちょっと補足しておきたい。
言いたいことをまともに書こうとするとコメント関連だけでまた1ページ行っちゃいそうなので、とりあえず覚え書きということで^^;
以下、主にJavaがターゲット。

  1. コメントが全て全く要らないというわけではない。“適切な”コメントを書くべきだ、という事に異存は無い。
  2. 適切な変数名やクラス名・メソッド名を付けるのが大変なのと同様、適切なコメントを書くのは大変。けっこう労力(時間)がかかる。
  3. コメントを書くのは、プログラムをコーディングする能力とは別で、日本語の文章を簡潔に書く能力が必要。
  4. メソッド本体が1行しか無いようなメソッドでもJavadocコメントが数行になったりする事もある。実装を見ればすぐ分かる場合でも説明文章を苦労して書くのは馬鹿らしい気がする。
  5. Javaの文法は知っててもJavadocの文法を知らない人が居る。JavadocのHTMLを生成したことのない人はもっと多いと思う。(生成してみるとけっこう感激するよw)
    でも共通ライブラリー・ユーティリティーやフレームワークならブラウザーでJavadocが見られると便利かもしれないが、業務プログラム本体がそういう状態になっても、きっと見ない。
  6. プログラム本体の1ステップ毎に何をしているか書くようなコメントは冗長・無駄。
  7. コメントもソースレビューの対象になるはず。(コメントが増えればレビューの時間も相応に増えるはず)
  8. にもかかわらず、工数見積もりでステップ数とやらを根拠にする場合、「コメントを除いた実ステップ数」とかいうのを使うことが多い。つまり工数にコメントを書く分が含まれないと思われる。にもかかわらずコーディング規約で「全メソッドにコメントを書け」とか…。

コメントを付ける位置にも色々あって、ファイルヘッダーやクラスのJavadoc、フィールド・メソッドのJavadoc、メソッドの中身に書くコメント。
必要度が違うだろうから、ひとまとめにして要/不要を言えるわけもなく。

それから、コメントの目的。
「何をしているか」ではなく「何を意図しているか」「何故そうしているか」あるいは分かりづらい注意点・考慮点を書くべき。

ログ出力があるなら、それがコメント代わりにもなる事もある。

冗長なコメントの例…例えば「getDate() //日付取得」というコメントは、特に要らないでしょ。
そして「getPerson() //日付取得」とか「setDate() //日付取得」とか書かれていたら、正気を疑うぜw(メソッド名とコメントの相違は混乱の元)
(そういえば、コメントの内容が間違っててもコンパイルエラーは出せないね)

つまり、プログラミング言語も「言語」だから、何の処理をしているかという事実については、コメントで書かなくても伝えられるはず、という話。
ただ、そういう「文章っぽくなる」のを意図している言語がCOBOL(爆)
なので、英文でなく数学の記号(式)を使った方が簡潔で分かりやすいでしょ(代入を「a=1」と書くのと「MOVE 1 TO a」と書くのとどっちが簡潔か)とか、
でも理論の記号よりも利便性を優先したい(代入に「:=」でなく「=」を使いたい)とか、
コメントから派生して色々な話題が出てきちゃう(苦笑)

ああ、ソースの変更履歴をコメントに残しておくって話もあるなぁ(苦笑)
バージョン管理システム使えよってことで大筋同意だけど。
でも削除した場合って、履歴を探さなければ「昔は有ったという事に気付けない」というジレンマもあるんだよねー。

なので、よほど気力が出ないとやっぱりコメント全般についてまとめる事は出来ない…orz

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

手続き型vsオブジェクト指向vs関数型

2011-11-19 09:10:56 | プログラミング

数日前に「関数型言語が普及しない理由」というのが話題になってたみたいで、どこかに「オブジェクト指向は分かりやすい」ってな言及があって面白いと思ったw
それが本気か釣りかジョークかネタか分からないけど、なにせオブジェクト指向が流行り始めた頃は「オブジェクト指向分からん」って声が多かったので。

んで、一番分かりやすいのはやっぱ手続き型だよね、と思ったので自分が知っているプログラミング言語(パラダイム)の変遷についてちょっと書いてみた。

というか、ちょっとのつもりが意外と長くなってしまったので結論だけ別途書いておくと、
Scala最強(爆)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JavaFX・GroovyFX・ScalaFX

2011-11-11 06:59:51 | PG(Java)

第6回JavaFX勉強会に参加させていただきましたので、その感想です。
Togetter:2011/11/10_第6回JavaFX 勉強会( #jjfxug )

今までJavaでクライアントGUIアプリを作ろうと思ったらSwingだった(最近作っているツールScalaのSwingを使っている)が、今後はJavaFXになっていくようだし。
なんと言っても今回はJavaFX2.0とGroovyFX・ScalaFXの組み合わせなので、これは行くしかない!!という感じでJavaFX勉強会初参加。
そしたら、会場でいきなり桜庭(@skrb)さんがウクレレを弾いててちょっとびっくりしたw
(桜庭さんのプレゼンのオープニングで音楽が流れていたが、それに合わせてウクレレ(Javaのマスコットのデュークの形をしたウクレレなのでデュクレレだってw)を実際に演奏してた?)

「JavaFXはSwingに替わるGUIライブラリー」という程度の知識での参加だったので、JavaME・JavaSE Embeddedとの関係やJavaFXのポジションの変化という話からして大変興味深かった。
JavaFX3.0はJavaSE8に入る予定で、JavaFX2.01がJavaSE7対応。
(JavaSE8に入るということはOpenJDKに入るということなので、つまりOSSになる。という訳でOpenJFXという名前になるそうだ)
(「JSON ParserがJavaFXから無くなったのはJava8に入る布石ではないか」という推測だったけど、そうだとしてもJava8は2013年予定だから、けっこう先だなぁ(苦笑))

JavaFXではSwingとは用語が異なり、SceneGraph(シーングラフ)と呼ばれるツリー構造で表す。SwingのJFrameに当たるのがStageで、rootPaneに当たるのがScene。
Sceneにコンポーネントを追加していく。縦・横の一列に並べるにはVBox・HBox(Java SwingのBoxLayout、Scala SwingのBoxPanelに相当か)、テーブルはTableView(JTable相当)といった感じ。

コンポーネントもツリーやテーブル等の他に図形が使えるとか、ブラウザー・HTMLパーサー(WebView・WebEngine)が追加になったとか。
WebEngineではURLを指定してページを読み込む以外にHTML文そのものとかDOMとかJavaScriptも扱えるらしい。SwingのHTMLDocumentは細かいところに手が届かない(というか扱いにくい)感じだったので、WebEngineがどこまでいけるのか楽しみ。

今までのコンポーネント以外にも、アニメーション(Animation)・効果(Effect:影をつけたりぼかしたり)・CSSによるスタイル指定・音楽動画(Media)とか、すごく高機能なものに対応している。

それからBindにも驚いた。
プロパティー(クラスのフィールドのようなもの)にバインドしておくと、そのプロパティーの値が変わったら連動して自分の値も変わってくれるという。
(Excelでセルの値を変えたら他のセルの計算結果が変わるのと同じ)
これは便利に使える場面があるかもしれないなー(笑)

ちなみに、JavaFXはSwingと共存可能ではあるが、シームレスではないそう。
JavaFXのスレッドとSwingのスレッドは混ぜられない。
Swingの中にJavaFXを埋め込めるが、遅くなる。(JavaFXはグラフィックボードの機能を直接使うが、Swing上はJava2Dなので機能を使えない)


続いて関谷(@kazuchika)さんのGroovyFX。(→資料

Groovyはちらっとしか見たことが無くて、Javaを便利に扱う方向の言語という認識だったけど、冒頭の紹介でも「ツール(AntMaven等)や文化(命名規約等)をJavaと共有している」とのことだったので、認識は間違っていないかな。

で、GroovyFXはまだ開発途上なので、zipやjarの形では提供されていなくて、SVNからソースを取ってきてGradleを使って自分でビルドする必要があるんだそうだ^^;

Groovyはビルダーという考え方?でDSLを作ることが多いらしくて、HTMLを扱うMarkupBuilderとか、SwingBuilder・AntBuilderといったものがあるらしい。
(MarkupBuilderのサンプルソースはちょっと素敵だった(笑) ScalaのXMLリテラルはXMLそのものなので、それより面白いw)
GroovyFXもその考え方に則り、SceneGraphBuilderとかTimelineBuilderといったクラスがある。
JavaFX1.0の「JavaFX Script」の記述方法に近いらしい。

(Twitterを監視して画面が動くデモも面白かった。Togetterでいきなり「テスト」とかのツイートが並んでいる所があるけど、このデモの事を知らないと分からないだろーなー(爆))


最後が深井(@fukai_yas)さんのScalaFX。

ScalaFXはまだ未実装のクラスが多いのだそうだ。(Scalaってそういうの多いよな(苦笑))
Appletにも対応していないので、自分でApplet対応したとか。
(とは言え、HBox・VBoxも3日前に入ったとか、チェックボックスも無いので自作したとか、まだちょっと足りなさ過ぎるかなぁ^^;)

ScalaFXの記述方法も基本的にはGroovyFXと似ている。
GroovyFXではnewを使ったインスタンス生成は表に現れていないけど、ScalaFXではnewでインスタンス生成をしている。これはどちらかと言うと現行のScala Swingの書き方を踏襲した感じかな。
JFXAppを継承したobjectでJavaFXのプログラムを作る辺りも、Scala SwingのSwingApplicationと同じだもんな。


自分としては、GUIの記述方法として一番興味を引いたのはFXML。XMLファイルに記述し、Javaのクラスにはアノテーションを付けて連動させる。
XMLのタグはクラス名そのもの。自作クラスも指定できるので、このXMLファイルにはスキーマ(XMLタグの定義)が無い(定義できない)。
XMLファイルはプログラム実行時に読み込む(StAXを使っているそう)。(コンパイル時にXMLファイルを読み込んでクラスを生成するという訳ではない、ということだ)

桜庭さんも言及していたけれど、XMLファイルはツールが読み書きするのに便利。
やはりGUIはツールを使ってコンポーネントを貼り付けて構築していくのが楽で、Swingは結局そのツールで決定版が出なかったよね…。
JavaFX2.0はNetBeans7.1やSceneBuilderというツールが出るそうなので、期待する。

あと気になるのは、イベントがどれくらい扱いやすいか。
例えば「左側のツリーをクリックすると右側のペインに詳細情報を出す(Bindってこういうのには使えないかな?)」とか「右クリックで開くポップアップメニュー」とか「ショートカットキー」とか。
ツールと絡んでこの辺りが上手く記述できると良いんだけど、はてさて。

何はともあれ、勉強会でこうしてまとまった情報を目にすることが出来たのは重畳でした。ありがとうございました。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

データノードのホスト名

2011-11-03 19:01:59 | PG(分散処理)

VMware上にHadoopの完全分散環境を作ったが、円周率算出のサンプルを実行すると途中でエラーが発生することがあって気になっていた。(リトライして、最終的には実行完了する)
どうやらこれはデータノードにホスト名の設定をしていなかった為と判明。
きちんと名前を付けてやったら、快適に動作するようになった^^

という訳で分散環境の構築手順を修正。
(ついでにデーモンの自動起動の設定とか電源管理の設定とかも追記)
調査過程は別のページを作って、今までの構築手順と共にメモしておくことにする。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする