2012年4月22日日曜日

分からない学生が躓く点その1(関数・メソッド)

Javaを使ってプログラミングを教えていますが、学生が躓く点が共通していることが分ってきました。
見よう見まねでプログラミングしていればそのうちわかるようになるだろうと思っていましたが、考えが甘かったです。
分からない学生は既存のコードから逆算して「あーこういうことか!」と推測する力が弱いと感じます。よって、何時まで経っても暗号かおまじないのままです。写経のように書き写すだけで進展がありません。

幾つか躓くポイントがあるのですが、まず大きいのは関数・メソッドです。何がわからないかというと、たとえば呼び出しと宣言が同じファイルに書いてあることが混乱を招くようです。例えば、

正解サンプル:
public static void main(String[] args){
   int year = 2010;
         if( isLeapYear(year) ){
            System.out.println("LeapYear");
         }
}
public static boolean isLeapYear(int val){
   boolean result = false;
   :
   :
   return result;
}

こんな感じのコードを書いてもらおうと課題を出すと、

 メソッドの呼び出しを
   if( isLeapYear(int year) ){
     :
  }
と書いたり、定義の箇所で
 public static boolean isLeapYear(year) と書きます。

その他にはメソッドの返り値のreturn文ですが、
 return 100; というようにリテラルであれば書けていたのに変数を返すように指示すると

 return int a; と書いたりします。

なんとなく、理解できていない点はわかるのですが、学生に説明できるまでにまとめられなく、自分の力不足を実感します。

変数が値を保存する箱だという定番の説明が理解できるのですが、メソッドへの引数、リターン文で値を返すということになると途端にできなくなります。

いまだ引数、パラメータについては上手く説明できませんが、返り値は次のように説明すると大体わかってくれます。

  int a = 1 + 3;

これは 1と3の計算結果が変数 aに格納される。それと同じで、

     int a = foobar(1,3) ;

メソッドの実行結果が aに格納される。aに格納する値が何かというとreturn 文に書かれている値である。ここで値を「返す」と説明してしまうと、返すとはどういうことかわからず混乱してしまいます。

型が厳しいJavaを教えることがそもそも無謀というレベルかも知れませんが、スクリプト言語をやっとこさ覚えたところで将来エンジニアにあとしてやっていくのは無理だと思うので、試金石という意味でも今後もJavaで行くのが良いと考えています。(わかりませんけどねw)

0 コメント:

コメントを投稿

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger