日経ソフトウェア7月号の特集「そのコードは古い!」を読んだ感想。
これとは別の技術書を書店まで買いに行きました。
そこで日経ソフトウェアを手に取りました。
いつもは、日経ソフトウェアを書店でパラパラ目を通す程度です(エンジニアに端くれかみたいな感想は兎も角) ただ、今回は特集のタイトルに惹かれて買ってじっくり読んでみました。
なので、特集に限って読んだ感想というメモを残します。 あくまで、私めの意見というか感想なので・・・スルーしていただけると。
C言語編
point1「void mainはやめよう」とありますが、これは入門書のサンプルが諸悪の根源かと思います。
自分がC言語を学習したときは、普通にvoid mainで教わりました。
当時は、Unix/Linuxの知識も無いので当たり前ですし、戻り値が、intになっていてもおまじない程度の認識でした。
なので、intの意味まで教えてあげるべきかなーと思います。(特に初学者に対してですが)
こうやって、サンプルコードとして教えてあげればいいかなーとか思いました。(これなら処理が正常終了していることが明確になるかと)
1 2 3 4 5 6 7 |
|
以下のものは当たり前の話かなーと思いました。
- point2「文字定数にchar型は使わない」(関数同士で受け渡す際はint型に変換されるから)
- point3「古い関数定義はやめよう」(K&Rの記述方法。本を読めば分かります)
- point4「gets関数は古い」(確保された領域以上のものが入力されたらバッファオーバーフローになっちゃうから)
- point5「switch文あり気で考えない」(これはどの言語でも言える話で、コードが見づらくなっちゃう上に、break文忘れるとバグになってしまう)
- point6「何でも#defineで定数や関数マクロを定義するのは古い」(コンパイル時の型チェック等スルーする上、関数マクロは記述ミスをしやすくなるから)
- point7「定数の羅列に#defineは古い」(意味のある連続したものだとenum使ったほうが便利ですね)
- point8「ポインタサイズでメモリを確保しない」(ポインタ型とデータ型は処理系によってサイズが違うから)
point8の良くないコードは以下のもの
1 2 |
|
良いコードは以下のもの
1 2 |
|
書いて思ったけど、普通のことだな。。。
java編
お仕事柄メイン(?)で使ってたので・・・
- point1「C言語で主流だったハンガリアン記法は古い」
- point2「スネークケースは使わない」
- point3「メソッドの先頭に変数宣言を並べるのは古い」
- point4「エラー種別をintで返さない」
- point5「処理結果を引数に格納しない」
このあたりはCの悪癖なんで、マジ勘弁して下さい・・・。
コードレビューにこんなコード出してきたら速攻Rejectしちゃいますよ。。。
poin4は、Exceptionをthrowすればいいのでなんとかなります(尤もjniに依存するようなコードだと考えてもいいかなーなんて個人的には考えてしまいます)
point5なんか副作用が山盛りなコードになりますしね。
気を取り直して・・・。
- point6「ジェネリクスを使用しないコードは古い」(リストを型安全にできますよねー。キャスト地獄はヤダー)
- point7「定数インターフェースは古い」(static importとか、定数の機能分割をやるでしょ)
- point8「意味のない定数値は書かない」(enumにしろって話。これもC言語の定数定義の話と同じですね)
- point9「finally句でcloseするのは古い定石」(java7以降だとそうですね。java6までだとこの定石を使いましょう)
- point10「ジェネリクスで型を省略しないのは古い」(point6と矛盾してるような感じですが、こちらはjava7の話で俗にダイヤモンド演算子と呼ばれるもの)
- point11「ファイルの読み込みには数行も使うな」(java7以降に限る話です。java6までは従来道理の読み込み処理を書きましょう)
- point12「定番ライブラリはApacheCommonsだけではない」(それもそうだよねーって話。ジェネリクス非対応だったり、流れるようなインターフェースもなかったりだし)
- point13「Listからある条件に一致した要素を取り出す際、for文を使うのは古い」(filterメソッドを使ったらいいよってこと。因みにGroovy使えって言ったらダメ?)
point9で言ってるjava7での新しい定石「close句の省略」
1 2 3 4 5 6 |
|
point10のダイヤモンド演算子
1
|
|
point11のファイル読み込み処理(Filesクラスが便利になった)
1
|
|
因みに、従来の長い処理(途中の前後を省略)
1 2 3 4 5 |
|
javascript編
思うところというよりも・・・
HTML5といいJQuery,CoffieScript,Dart等、言語の発展が最近めざましいと個人的に思ってます。
そのため、感想というよりもこうするのが最近のトレンドだよねーみたいな感じでした。
- point1「HTMLのform要素に処理を埋め込むのは古い」(特殊な事をしなければ、HTML5で事足りることが増えてきたと思う)
- point2「ロールオーバにa要素を使っているのは古い」(ブラウザのサポートに依るのは?と思った。SE/SIerなところだと未だにIE6でみたいなことがまかり通るし、一概に古いと断言するのはどうかと思った。)
- point3「JavaSriptライブラリを使わないのは時代遅れ」(これはそうかなーと思う。実際にjQueryは使いますし。)
- point4「jQueryを使わないコードは古い」(古いと断言するのは、どうかと思うが使うほうが楽できる。コラムにあったけど万能ではないね。特にIEが絡むとなると途端に辛くなる)
- point5「HTML5のAPIを使わないと時代遅れ」(新規に書く場合ならHTML5を使っていき、補助(Flashがやってたとことか)でJSを使うのがいいのかなーと思う)
- point6「多言語の助けを借りる」(DartとかTypeScriptかな。得手不得手があるので適材適所で使えばいいと思う。jsとかで書きづらいところはサーバサイドJavaとかでやってもいいわけだしね)
C#編
自分が、C#を現在進行形で勉強中なので、感想が出てくるより先にこう書けばいいのかー。
なんてことを思いました。
サンプルのあるのが全てではないよ~的な感じですね。
Ruby編
これは、好きな言語
- point1「大量の引数が必要な際ハッシュオブジェクトを利用するのは古い」(このテクニック自体は好きだけど、ハッシュキーが無かったら大惨事になることがありますね)
- point2「配列のグループ分けを長々と書くのは古い」(1.8系に限らず、1.9系でも思わずやってしまいそうな処理がコード例だった。chunkメソッドで配列のグループ分けができるのか)
- point3「配列からランダムに値を抽出する際delete_atメソッドは古い」(samplingって意味から作ったっぽいsampleメソッドを使用すればランダムに値を抽出できる)
- point4「テストフレームワークは1つと考えるのは古い」(要するに適材適所。RSpecとTestUnitの両方を併用(てテスト範囲なり、記述方法なり、assertなり)してテストをすればいいと個人的に思ってる)
- point5「execコマンドでjavaのクラスを読み込むのは古い」(一々、外出しにしたjavaを読み込む何かの実行ファイルを作成する必要はなく、JRubyを使えばいいよって話。割りと普通かと思ってた)
point1はRuby2.0で導入されたキーワード引数でデフォルト値を設定すればいいですね。
1 2 3 4 5 6 |
|
point2の配列のグループ分け(偶数のものと奇数のもを分ける)
1
|
|
point3の配列からランダムに値を抽出する
1
|
|
point5のJRubyで実行する話(Jythonとかも似たような感じですね)
1 2 3 4 5 |
|
特集を読んだ感想は以上かなー。 なんとなく、書籍のサンプルがアレな時があるって感じじゃねーの?みたいな感想でごめんなさい。