第4講 メソッド=関数を理解しよう1
第7話 親分が子分に、子分が子分命令を出す2つの例
具体例1
public class A{
public static void main(String args[]){
System.out.print ("1+2+3+4+5+7+8+9+10=");
System.out.println(f(0));
}
public static int f(int x){
x=x+1;
return(g(x));
}
public static int g(int x){
x=x+2;
return(h(x));
}
public static int h(int x){
x=x+3;
return(i(x));
}
public static int i(int x){
x=x+4;
return(j(x));
}
public static int j(int x){
x=x+5;
return(k(x));
}
public static int k(int x){
x=x+6;
return(l(x));
}
public static int l(int x){
x=x+7;
return(m(x));
}
public static int m(int x){
x=x+8;
return(n(x));
}
public static int n(int x){
x=x+9;
return(o(x));
}
public static int o(int x){
x=x+10;
return(x);
}
}
実行画面
(以降は、実行画面はコマンドプロンプト画面で例示)
解説
ごめんなさい。初心者の方には何のことやらわかりませんね。
そこでもっと簡略にしたもので説明しましょう。
public class A{
public static void main(String args[]){
System.out.print ("1+2=");
System.out.println(f(0));
}
public static int f(int x){
x=x+1;
return(g(x));
}
public static int g(int x){
x=x+2;
return(x);
}
}
実行画面
まず、mainがfに0を送ります。
fはそれに1を加えた1をgに送ります。
gは送られてきた1に2を加えた3をfに返します。
fはgから返された3をmainに返します。
その結果、mainで1+2の計算結果が示されます。
このようにコンピュータの動きを一つ一つ追うことをトレースといいます。
では、
public class A{
public static void main(String args[]){
System.out.print ("1+2+3+4+5+7+8+9+10=");
System.out.println(f(0));
}
public static int f(int x){
x=x+1;
return(g(x));
}
public static int g(int x){
x=x+2;
return(h(x));
}
public static int h(int x){
x=x+3;
return(i(x));
}
public static int i(int x){
x=x+4;
return(j(x));
}
public static int j(int x){
x=x+5;
return(k(x));
}
public static int k(int x){
x=x+6;
return(l(x));
}
public static int l(int x){
x=x+7;
return(m(x));
}
public static int m(int x){
x=x+8;
return(n(x));
}
public static int n(int x){
x=x+9;
return(o(x));
}
public static int o(int x){
x=x+10;
return(x);
}
}
実行画面
の場合でトレースしてみましょう。
まず、mainがfに0を送ります。
fは送られてきた0に1を加えた1をgに送ります。
gは送られてきた1に2を加えた3をhに送ります。
hは送られてきた3に3を加えた6をiに送ります。
iは送られてきた6に4を加えた10をjに送ります。
jは送られてきた10に5を加えた15をkに送ります。
kは送られてきた15に6を加えた21をlに送ります。
lは送られてきた21に7を加えた28をmに送ります。
mは送られてきた28に8を加えた36をnに送ります。
nは送られてきた36に9を加えた45をoに送ります。
oは送られてきた45に10を加えた55をnに返します。
nはoから返された55をmに返します。
mはnから返された55をlに返します。
lはmから返された55をjに返します。
jはlから返された55をiに返します。
iはjから返された55をhに返します。
hはiから返された55をgに返します。
gはhから返された55をfに返します。
fはgから返された55をmainに返します。
以上によって、1+2+3+4+5+6+7+8+9+10の計算結果がmainに返され表示されることになります。
もう一度動きを追っていましょう。
0(main)+1→1(f)
1(f)+2→3(g)
3(g)+3→6(h)
6(h)+4→10(i)
10(i)+5→15(j)
15(j)+6→21(k)
21(k)+7→28(l)
28(l)+8→36(m)
36(m)+9→45(n)
45+10=55(0)
main←f←g←h←j←k←l←m←n←55(0)
どうですか。見事でしょう。
具体例2
public class A{
public static void main(String args[]){
System.out.println("はじめての");
System.out.println("Java");
System.out.println("プログラミング");
System.out.println("の学習");
System.out.println("は");
System.out.println("とっても");
System.out.println("難しいけど、");
System.out.println("楽しい。");
System.out.println("どんどん");
System.out.println("腕を");
System.out.println("磨きます。");
System.out.println("・・・");
System.out.println("を合体すると、");
System.out.println("→→→");
System.out.println(f("はじめての"));
}
public static String f(String x){
x=x+"Java";
return(g(x));
}
public static String g(String x){
x=x+"プログラミング";
return(h(x));
}
public static String h(String x){
x=x+"の学習";
return(i(x));
}
public static String i(String x){
x=x+"は";
return(j(x));
}
public static String j(String x){
x=x+"とっても";
return(k(x));
}
public static String k(String x){
x=x+"難しいけど、";
return(l(x));
}
public static String l(String x){
x=x+"楽しい。";
return(m(x));
}
public static String m(String x){
x=x+"どんどん";
return(n(x));
}
public static String n(String x){
x=x+"腕を";
return(o(x));
}
public static String o(String x){
x=x+"磨きます。";
return(x);
}
}
実行画面
皆さん、他にもいろいろ考えてみてください。
さて、それでは次話はいよいよ関数の独立の意味と関数の意義について述べます。
第6話へ 第8話へ
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門
基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門
基礎から応用まで第2部
初心者のための
VC++による C言語 入門 C++ 入門 基礎から応用まで第3部
初心者のための Java 入門 サイト 基礎から応用まで第1部
初心者のための Java 入門 サイト 基礎から応用まで第2部
初心者のための Java 入門 サイト 基礎から応用まで第3部