SEの現場2004
SE shop.com SEの現場を購入する
SEの現場2004
   
過去記事
第9回 「Javaコース中級編(その4)」
第8回 「Javaコース中級編(その3)」
第7回 「Javaコース中級編(その2)」
第6回 「Javaコース中級編(その1)」
第5回 「Javaコース初級編(Q&A)」
第4回 「Javaコース初級編(その4)」
第3回 「Javaコース初級編(その3)」
第2回 「Javaコース初級編(その2)」
第1回 「Javaコース初級編(その1)」

誌面記事
マンガでわかる
会社・業界図鑑2004
気になる会社の状況と、業界でのポジションが一目でわかる。転職者・新入社員必見!!
SEの職場を拝見
日本オラクル、サイバードなど、「こんな会社で働きたい」職場を持つ企業に突撃取材。本誌未収録写真もアップ。
データベースのセキュリティを考える
今、重要な課題として挙げられるセキュリティの強化。なかでもデータの保護は最も重要です。データは通常データベースに格納されていますが、データベースの中にあれば大丈夫とは言い切れません。この連載ではデータベースのセキュリティについて皆さんと一緒に考えていきたいと思います。
クイズで実践
成功するSEの交渉術
この連載では、SEが獲得すべき交渉のスキルについて、会話形式の例題にそって解説していきます。現場での交渉は毎日が真剣勝負です。ここでは会話に沿って示される選択肢のなかから「これだ」と思うものを選ぶことにより、あなたの交渉スキルをチェックできます。では、さっそく始めましょう。
矢澤久雄の「プロのコード、アマのコード」
「プロらしいコードとは何か?」って聞かれたら、あなたは、何と答えますか? 『プログラムはなぜ動くのか』の著者矢澤久雄がプロのプログラミングを懇切丁寧に教えます。
新人PMに贈る、53通の手紙
え、今日から、プロジェクトマネージャー?期待と不安に満ちた新人PMに贈る現場感が満ちたエールです。
あなたは「もの作り派?」
「マネジメント派?」
 
あなたはどちらの道を選びますか? 自分のキャリアを、限りなくシンプルに考えるためのガイド。
トム・デマルコ インタビュー
プロジェクトマネジメントの神様 トム・デマルコに聞く「PMに必要なもの」。本誌未収録部分も掲載。
SEのための情報源
〜ユーザーグループ・雑誌・書籍〜
『SEの現場 2002〜2004』に掲載した、SEが読むべき雑誌、書籍、ユーザーグループを一挙紹介!
登録記事  
  第6回 Javaコース中級編(その1) 著者顔写真
グレープシティ株式会社 アドバイザリースタッフ
矢澤久雄
2004/6/3

 この記事は、翔泳社で実施する独習ゼミの研修を紙上で再現したものです。

使用したプログラミング言語はJavaです。プログラミング経験の有無から「初級コース」と「中級コース」に分かれて、それぞれ4問ずつプログラミングの課題に取り組んでいただきました。講師を務めた私の役目は、赤ペンでソースコードを添削することでした。提出されたプログラムは、どれもきちんと動作しましたが、誰にも共通した問題がありました。それは「プロらしくない」ということです。

実際に内定者さん(学生さん)から提出していただいたソースコードと添削結果を掲載しますので、皆さんも一緒にプロらしさとは何かを考えてみてください。また、指導する立場の人は、連載で指摘していく項目を意識しながら、後輩指導に取り組んでみるのもよいでしょう。今回は、中級コース第1回の課題を紹介します。なお、提出者の名前は匿名であり、ソースコードも一部を抜粋したものを掲載しています。

☆ ☆


以下の仕様の「数当てゲーム」を作成してください。

・コンピュータが、乱数で1〜100の中から1つの数を選びます。
・その数をユーザーが、キー入力で当てます。
・数が当たらなかった場合は、「もっと大きい」または「もっと小さい」というヒントが表示されます。
・数が当たった場合は、何回で当たったかが表示されます。

 

 


1 :// 課題1
2 :import java.io.*;
3 :
4 :class Numberquiz {
5 :  public static void main(String args[]) {
6 :    double ans1 = Math.random() * 100  +1 ;
7 :    int ans2 = (int) Math.ceil(ans1) ;
8 :
9 :    try {
10:      InputStreamReader isr = new InputStreamReader(System.in);
11:      BufferedReader br = new BufferedReader(isr);
12:
13:      for( int i = 1 ; ; i++ ) {
14:        System.out.print("いくつだと思いますか?") ;
15:        int yourans = Integer.parseInt(br.readLine()) ;
16:        if( ans2 == yourans ) {
17:          System.out.println("正解です!あなたは" + i + "回で当てました。") ;
18:          break ;
19:        }else
20:          System.out.println( (ans2 < yourans) ? "もっと小さい" : "もっと大きい" ) ;
21:      }
22:    }
23:    catch(Exception e) {
24:      System.out.println("Exception: " + e);
25:    }
26:  }
27:}

 



もっと多くのコメントを書きましょう
 プロになると、誰か他の人にソースコードを引き継ぐ場合があります。できるだけ多くのコメントを付けて、内容を読みやすくしてください。とはいえ、コメントが多すぎてもいけません。どの程度が適切なのかは、自分が引き継ぐ立場だったらどうだろう? と考えて判断してください。
プログラムの先頭には、プログラムの内容、作者、レビジョン(改訂履歴)、作成年月日などを示すとよいでしょう。これらは必須のコメントです。クラスには、何のためのクラスなのかを示すとよいでしょう。また、メンバ(フィールドとメソッド)ごとに機能の説明を書きましょう。メソッドの処理の流れの中には、フローチャートで1つの図記号になる単位でコメントを付けるとよいでしょう。

繰返しはwhile文を使うとよいでしょう
 これは個人的な好みの問題であるとも言えますが、回数をカウントした繰り返しならfor文、回数が未定で条件に応じた繰返しならwhile文を使うと、誰にでもわかりやすいプログラムとなります。以下に例を示します。

// for 文を使った繰り返し
for (int i = 1; ; i++) {
    ・・・
}

// while文を使った繰り返し
do {
    ・・・
 } while (ans2 != yourans);

誰にでも理解できるシンプルな表現を心がけましょう
13行目のfor (int i = 1;;i++) { ・・・ } という書式や、20行目の三項演算子(?:)を使った部分は、トリッキーでカッコイイのですが、誰にでも理解しやすいとは言えません。あなたがベテランプログラマになった状況を思い浮かべてください。もしも「あなたのコードは、新人プログラマには難し過ぎる部分がある。このシステムの改造は、新人プログラマに任せようと思ったが、引き続きあなたにやってもらうことにしよう」などという事態になったら困りますね。いつまでたっても、同じシステムのメンテナンスから離れられないからです。
誰でも理解できるシンプルな表現を心がけましょう。たとえば、三項演算子ではなくif〜else文を使えばよいのです。

// 三項演算子を使った場合
System.out.println( (ans2 < yourans) ? "もっと小さい" : "もっと大きい" ) ;

// if〜else文を使った場合
if (ans2 < yourans) {
    System.out.println("もっと小さい" ) ;
} else {
    System.out.println("もっと大きい" ) ;
}

もちろん、コードの実行速度が要求される場面であれば、どんなにトリッキーなコーディングをしても構いません。ただし、この課題の内容では、コードの実行速度は要求されないので、見やすいコードとなることを優先してください。

この調子で引き続き学習を続けていってください。 がんばってくださいね!

トップページ
(c) 2004 Shoeisha Co., Ltd. All rights reserved.