資料 - CDR6275

メソッドとはーメソッドを利用するメリット (1)
•
プログラムが大きくなっても全体を把握しやすくなる
•
機能単位に記述するため、修正範囲を限定できる
•
同じ処理を1つのメソッドにまとめることで、作業効率が
あがる
プログラミングC
第3回
メソッド
1
メソッドとはーメソッドを利用するメリット (2)
2
メソッドとはーメソッドの定義
•
メソッドの定義:メソッドで何をするか記述する
•
メソッドの呼び出し:main(など)からメソッドを実行する
•
一番シンプルなメソッドの定義
•
メソッド名:hello
•
「こんにちは」と出力するだけのメソッド
仕事をしろと言うのが
メソッドの呼び出し
この人がどんな仕事を
するか記述するのが
メソッドの定義
3
4
メソッドとはーメソッドの呼び出し (1)
•
メソッドとはーメソッドの呼び出し (2)
helloメソッドの呼び出し
•
•
mainメソッド内で「Hello();」と書けば、helloメ
ソッドが呼びされて実行される
mainメソッドからメソッドを呼び出すと、呼び出したメ
ソッドを実行し、戻ってきてから次の行を実行する
5
メソッドとはーメソッドの呼び出し (3)
•
6
引数の利用ー引数とは
mainメソッド以外(自分で作ったメソッド)からでもメソッ
ドを呼び出せる
7
•
メソッドを呼び出すときに値を渡すことができる
•
その時に渡す値のことを引数(ひきすう)と言う
8
引数の利用ー1つの引数を渡す例 (1)
引数の利用ー1つの引数を渡す例 (2)
9
引数の利用ー複数の引数を渡す例 (1)
10
引数の利用ー複数の引数を渡す例 (2)
11
12
メソッドの定義と呼び出し(まとめ)
引数の利用ー仮引数と実引数
•
仮引数(かりひきすう):メソッドの定義で入ってくる値を
格納する変数 (呼び出されないと値は決まっていない)
•
実引数(じつひきすう):メソッドを呼び出すときに実際に
用いる値
class SampleClass{
public static void main(String[] args){
hello();
helloWithName("湊");
add(3, 5);
}
public static void hello(){ // 引数なし
...
}
public static void helloWithName(String name){ // 引数1つ
...
}
public static void add(int x, int y){ // 引数2つ
...
}
}
13
戻り値の利用ー戻り値とは (1)
引数の利用ー変数のスコープとローカル変数
•
14
メソッド内で定義されている変数はそれぞれ独立してい
る (別のもの)
•
15
メソッドで行った処理の結果を呼び出した側に返すこと
ができる
16
戻り値の利用ー戻り値とは (2)
•
戻り値の利用ー戻り値とは (3)
メソッドから値を返すにはreturnを使う
メソッドの定義では、returnする変数の型を書く
•
•
何も返さないメソッドではvoidと書く
•
引数は複数渡せるが、複数の戻り値を返すことはできない
class SampleClass{
public static void main(String[] args){
...
}
public static void someMethod(...){
...
// 何も値を返さない=returnで終わらない
}
public static int main(String[] args){
int result;
... // resultを計算
return result; // int型の値を返す
}
}
17
戻り値の利用ー戻り値を受け取る
•
18
戻り値の利用ー戻り値をそのまま使う
メソッドから戻った値を変数に代入して利用する
•
19
変数に代入しなくても、戻り値をそのまま使うことがで
きる
20
オーバーロードの利用 (1)
戻り値の利用ーreturn文の注意点
•
return文は値を戻すだけでなく、メソッドを終了させる
•
引数の型や個数が違えば、同じ名前のメソッドを複数定
義できる (メソッドのオーバーロードと呼ぶ) (191ページ)
•
この授業の後で出てきますが、オーバーライドとの違
いに注意すること
•
引数の型と個数が同じだと、戻り値が違っても定義で
きない (メソッドを呼び出すときに、どのメソッドを
呼び出せばよいのか決められないため)
•
参考:メソッドのシグネチャ (194ページ参照)
21
オーバーロードの利用 (2)
22
引数や戻り値に配列を用いる
•
23
メソッドの引数に配列を利用できる
24
引数や戻り値に配列を用いるー値渡しと参照渡し (1)
•
メソッドを呼び出すときには値はコピーされる (値渡し)
•
•
呼び出されたメソッドの中で書き換えても、それはコ
ピーされた変数を書き換えているだけ
class SampleClass{
public static void main(String[] args){
int x = 2;
hello(x);
System.out.println("x=" + x); // 「x=2」と出力される
}
public static void hello(int x){
x = 3;
}
}
25
配列をメソッドの引数として渡すときには、参照が渡さ
れる (参照渡し)
•
呼び出されたメソッドの中で配列を書き換えると、呼
び出した側の配列も書き換わる
class SampleClass{
public static void main(String[] args){
int[] x = new int[1];
x[0] = 2;
hello(x);
System.out.println("x=" + x[0]); // 「x=3」と出力される
}
public static void hello(int[] x){
x[0] = 3;
}
}
26
コマンドライン引数 (1)
引数や戻り値に配列を用いるー配列を戻り値に使う
•
引数や戻り値に配列を用いるー値渡しと参照渡し (2)
配列を戻り値とすることもできる
27
•
mainメソッドに引数を渡すことができる(コマンドライン
引数)
•
CPad for JavaでHello.javaを書いて、ボタンを押すと起
こること
•
javac Hello.java (コンパイル)
•
java Hello (実行)
28
コマンドライン引数 (2)
•
課題 (1)
実行するときに引数を与えることができる
•
java Hello arg1 arg2
•
このときargs[0]="arg1"、args[1]="args2"となる。
•
CPad for Javaだと、メニューの「実行」→「実行時パ
ラメータ」に「arg1 arg2」と入れる。
29
課題 (2)
•
ArtistData.javaおよびKaraokePad.javaを授業のホーム
ページ(http://cdr6275.jp)からダウンロードしてくださ
い。
•
ArtistData.javaは書き換えません。
•
KaraokePad.javaに書かれた指示にしたがって、完成さ
せてください。
31
•
Tepco.javaおよびRefactoredTepco.javaを授業のホーム
ページ(http://cdr6275.jp)からダウンロードしてくださ
い。
•
Tepco.javaを実行してください。このプログラムは3パ
ターンの電気料金を計算します。Tepco.javaは書き換え
ません。
•
RefactoredTepco.javaを書き換えて、Tepco.javaを実行
したのと同じ動作をするようにしてください。
30