カテゴリー
JavaScript

関数について知ろう1

この章ではユーザー定義関数について説明します。
関数とは「引数と言うデータ」を受け取って、ある一定の処理を行い、戻り値という結果を呼び出し元に返す命令のことを言います。
引数とは関数を実行するときに使われるデータです。戻り値とは関数を実行した結果、返される値です。
エクセルをご存知の方はわかると思いますが、例えばエクセル関数にSUMと言う関数がありますが、この関数は指定した範囲のデータに基づいて足し算を行う関数です。
例えば指定した範囲のデータが3,5,7(引数)であるならば結果は15です。
SUMには初めから指定した範囲の足し算を行うと言う仕組みが備わっています。エクセルの内部機構でSUMの機能は指定した範囲の足し算を行うというプログラムがされているということです。
この章で説明する関数はユーザー定義関数という名前が付いていますが、要はこのSUMのような機能を持つ関数を自分で作る方法について説明をしていきます。
例えば「消費税を自動で計算する関数」を自分で作りたいとします。
その場合、お金を関数に渡すと関数は商品金額に消費税率を掛けた処理をして、その結果を返すという関数を作ることになります。
関数に「ある一定の処理」を書くことを「関数の定義」といいます。
書き方は3つあります。1 関数名の付け方は基本的には変数の命名規則と同じです。
引数が複数ある場合はカンマで区切ります。
必要が無いならば引数は省略出来ます。1 カッコの中の引数はダブルクォートで囲って何個でも書くことが出来ますが、引数の末尾には「関数の処理文」を書きます。
処理文もセミコロンで区切れば何個でも書くことが出来ます。
「関数の定義の基本構文2」の説明は「関数について知ろう2」で説明します。1 関数はデータ型であり、配列リテラルと同じように関数も関数リテラルで記述することが出来ます。
「関数の定義の基本構文3」の説明は「関数について知ろう3」で説明します。
実は関数はただ書いただけでは動きません。
関数を実行するためには関数を呼び出さなくてはいけませんが、その構文は以下の通りです。1 必要が無いならば引数は省略出来ますが、引数を省略する場合もカッコを付けてください。
引数が複数ある場合はカンマで区切ります。
この章では「関数の定義の基本構文1」を説明します。
では例をみてみましょう。
この関数の書き方が一番分かりやすくて、よく使われます。11 この関数は三教科の平均を求める関数です。
heikinは関数名で、変数の命名規則と同じ範囲で自由に付けることが出来ます。
この関数を呼び出すには関数名と同じ名前を付けて呼び出します。
例で言えば以下の箇所です。1 関数を呼び出すことによってheikin関数の中身が実行されます。
関数の呼び出しの1のkokugo,sansuu,eigoの部分を実引数といい、1のe,f,gの部分を仮引数といいます。
なお、関数を呼び出しする位置は関数の定義の前でも後でも問題ありません。1 つまり例のように1を関数の定義の後に書いても問題ありません。

ではこの関数について詳しく見てみましょう。
①heikin(kokugo,sansuu,eigo);で関数を呼び出します。
引数である変数にはそれぞれ50、40、90が代入されています。
②1で関数を呼び出した後はkokugoの値が関数の引数eに、sansuuの値がfに、eigoの値がgに代入されます。
補足すべきことが2つあります。
1つ目は実引数と仮引数の変数名が同じでなくても問題ありません。
つまりkokugoとe, sansuuとf, eigoとgが同じ変数名である必要はありません。
2つ目は仮引数にvarは付ける必要はありません。
③2で仮引数e,f,gの部分にそれぞれ実引数の値が代入されましたが、仮引数eはfunction内部のeの部分に、仮引数fはfunction内部のfの部分に、仮引数gはfunction内部のgの部分に代入され計算が実行されます。1 ④function内部の処理が終わった後は呼び出し部分の1に戻ります。
結果は以下の通りです。
「三科目の平均は60です」

では次の例を見てみましょう。11 先ほどの例とほとんど同じですが、このheikin関数は計算結果を呼び出し元に戻しています。
結果を戻すには関数内に1という形式で記述してください。
returnは値を1つだけ返すことが出来ます。
そして、返された結果は例の1に代入します(変数名はbでなくても自由です)。
最後に1で出力して、結果を表示します。1
次は仮引数と実引数の数が違う場合はどうなるのかを説明します。11 heikin(kokugo,sansuu);のように実引数が2つで、1 のように仮引数が3つの場合、つまり実引数が仮引数より少ない場合は仮引数の余った変数(この例ではg)にはundefined(未定義値)が入ります。
結果は「NaN」ですが、これは数値型の値であり、この例のようにundefinedと足し算するなどの通常とは違った演算が実行された時に返される値です(数値に変換しようとしてできなかった場合)。
答えは以下の通りです。
「三科目の平均はNaNです」

カテゴリー
Java

メソッドについて知ろう

この章ではメソッドについて説明します。
これまでたくさん使ってきたmainメソッドもメソッドの1つなので、mainメソッドの説明から始めます。
これまでmainメソッドは詳しく説明しませんでした。
その理由はプログラムの基礎を理解していないとメソッドの説明はできないからです。
ではmainメソッドについて説明します。
mainメソッドは以下の通り定義します。1 Javaのプログラムはmainメソッドから始まる決まりになっています。
mainは他の名前で代用することができませんので、必ず必要な名前になります。
publicはクラスの外からのアクセスすることができることを意味します。
publicについては「クラスについて知ろう」の章で説明します。
つまり、publicの付いたメソッドはどこからでも利用することが出来ると言うことです。
staticは クラスのオブジェクトを作ることなくアクセスすることができると言う意味です。
staticについては「staticについて知ろう」の章で、オブジェクトについては「クラスについて知ろう」の章で詳しく説明します。
String args[]はコマンドラインで入力した時に、この場所に引数というデータを入れることが出来るのですが、String args[]という形式なので文字列の配列が入ります。
ここはStringしか定義できません。
つまり、int型にしたりはできません。
コマンドライン入力については「コマンドライン入力について知ろう」の章で説明します。
voidはメソッドが戻り値を返す必要が無い時に使います。
voidも戻り値も後で詳しく説明します。
mainメソッドはプログラムの中で最初に実行され、戻り値を返す必要がないので、voidになっています。
mainメソッドは必ず書かなくてはいけないメソッドなので、少し特殊ですが、他にもメソッドは自身で作ることが出来ます。
メソッドとは与えたデータ(引数)に基づいて決められた処理を行い、戻り値を返す機能を持っています。
例えば消費税を自動で計算するメソッドを自分で作りたいとします。
その場合、メソッドは商品金額に消費税率を掛けた処理をして、その結果を返すという機能を持ったメソッドを作ることになります。
もう一例挙げます。
エクセルをご存知の方はわかると思いますが、エクセル関数にSUMと言う関数が有りますが、この関数は指定した範囲のデータに基づいて足し算を行う関数です。
例えば指定した範囲のデータが3,5,7であるならば結果は15です。
このSUM関数のような機能を自身でメソッドに書いていきます。

では実際に例を見てみましょう。
初めにメソッドを使わない例を作成して、メソッドの例と較べます。111 この例は3つの数字の平均を求める記述を行なっていますが、このように何度も同じ処理を書くのは面倒ですし、3つの数字の平均ではなく、3つの数字の合計を求める仕様に変更となったときに、変更点のすべてを書き直さなくてはいけません。
この例はまだ短いプログラムなのでいいですが、これが何百行あった時にすべて書き直すことは大変な作業になります。
このような時にメソッドを使うと便利です。
では、先ほどの例をメソッドを使って書き直します。
111 何度も同じ動きをする文を1つにまとめると言うのがメソッドの役割の一つです。
メソッドを使わない例では3か所あった同じ処理を以下のようなメソッドを使うと1箇所で済みます。
同じ文を何回も書かなくてもいいので、プログラムの可読性が良くなります。1ではメソッドの作り方について説明します。メソッドを作成する基本形は以下の通りです。1 メソッドの基本構文の詳細はこの後すぐに説明しますので今は形だけを覚えておいてください。
スペースの都合で1の部分が2行目に書かれていますが、通常はこの例のようにメソッド名の横に書いてください。
また、1の部分を「仮引数」と言いますが、引数とはメソッド内で使われるデータです。
そして、このメソッドを実行したい時には1 のように記述すればheikinメソッドを呼び出して実行することが出来ます。
つまり、以下の基本構文でメソッド内の内容を実行します。1 引数とはメソッドに渡すデータの事ですが、引数が複数ある場合には1のように1を使って、データ間を区切ります。
このメソッドの呼び出しのカッコの中にあるデータ1「実引数」と言います。
実引数は別に変数である必要はなく、1のようなリテラルでも問題ありません。
リテラルとは「99」や「”猫”」のようなデータそのものを意味します。
では先ほどの例でメソッドの流れについて説明します
実引数のxの値はメソッド本体の1にセットされ、yの値は1に、zの値は1にセットされることになります。
このように変数の値を渡すことを値渡しと言います。
そして、そのセットされた変数は実際のメソッドの中で使われることになります。1 また、実引数と仮引数の変数名が一致していなくても問題ありません。
ここで注意点して欲しいことがあるのですが、実引数と仮引数の型と順番と数は一致させてください。
例えば次のような引数の数の不一致はいけません。1 そして、仮引数がint型で実引数がString型と言うような型の不一致もできません。
しかし、仮引数と実引数の型が違っても、以下のように小さい型の実引数から大きい型の仮引数への自動変換は出来ます。1 この例の場合はint型の99と96をdouble型の1に自動変換してくれます。
次にメソッドの利点について説明します。
メソッドを作成する便利な点は例えば3つの数字の平均を求めるメソッドから3つの数字の合計を求めるメソッドにプログラムを変更する際にも以下のようにメソッドの一部分を変えるだけで簡単に変更できるということです。1
次にメソッドの基本構文について詳しく説明します。1 〇アクセスレベルとは 変数やメソッドに対してどのような場所からアクセスすることが可能であるかを指定することですが、ここではpublicを指定しています。
publicとはどこからでもアクセス可能であると覚えておいてください。
他にもprivateやprotectedなどを指定できますがpublicも含めてクラスの章で詳しく説明します。
static修飾子については「staticについて知ろう」の章で説明します。
〇戻り値型とはメソッドの実行結果を次の例で説明するreturnで呼び出し側に戻すことができるのですが、その戻す値のデータ型を記述します。
戻す値がない時はvoidを指定します。
〇メソッド名はshowTemperatureのように小文字から始まり、単語の区切り目は大文字であることが慣習になっています。
このように書かなくてもエラーにはならないので、自身で解りやすい名前を付けましょう。
またメソッド名にはgetとかshowとか動詞が使われることが多いです。
次はメソッドを実行した時に発生した値を呼び出し元に返す方法について説明します。
例を見てみましょう11 値を呼び出し元に返す構文は次の通りです。
先ほど説明したメソッドの例と違うところはreturnがあるか、無いかの違いです。1 計算結果を呼び出し元に返したい時には1という形式で書きます。
戻り値とは文字通り、呼び出し元に返したいデータです。
この例では1と書いています。
このreturnで返す戻り値がどの型なのかを指定するのが基本構文の「戻り値型」です。
この例では返す値がint型なので「戻り値型」もintになっています。
戻り値を返さないのであればvoidと書きます。1 戻り値である変数dは呼び出し元に戻って、変数gに代入されます。11 上の例は結果を変数に入れて、returnで返していますが、以下の例のようにreturnに直接、式を書いて返してもいいです。11 このような変数をローカル変数と言います。
例えばheikinメソッドのa,b,c,dの変数はheikinメソッド内でしか使用することは出来ません。
ですので、他のメソッドでa,b,c,dの変数名を使用しても、まったく別の変数になるので問題ありません。
この例でもmainメソッドとheikinメソッドでは同じ変数名a,b,cが使われていますが、全く問題ありません。
では次に進みます。
これまではmainメソッドから他のメソッドを呼び出していましたが、mainメソッド以外のメソッドから他のメソッドを呼び出すことも出来ますので、次の例を見てください。111 この例ではmainメソッドからmenseki1メソッドを呼び出していますが、さらにmenseki1メソッドから、menseki2メソッドを呼び出しています。
このような呼び出し方も出来るので覚えておいてください。
では説明を始めます。
mainメソッドの中でmenseki1メソッドを呼び出しています。
menseki1メソッド内では1の結果を1に代入しています。
さらにmenseki1メソッド内でmenseki2メソッドを呼び出して1に結果を代入しています。
最後にdとeを足したものをfに代入して、その値をreturnで呼び出し元に返して変数gに入れています。
結果は以下の通りです。1
次は配列をメソッドに渡す方法について説明します。
では例をみてみましょう。11 このメソッドは配列の要素の中で一番大きい数の値を求めるメソッドです。
〇配列をmaxメソッドに渡すには1のように引数に配列を書きます。

〇配列を渡しているのでメソッドの仮引数は1のように配列で受け取ります。

〇比べるための一番初めの基準の数値は1なので1の値である2になります。
そして、for文の中で以下のような順番でループして大きさを比べています。
1周目の11となり、1の方が大きいのでtop1には1が入ります。
2周目の11となり、1の方が大きいのでtop1には2が入ります。
3周目の11となり、1の方が大きいのでtop1には3が入ります。
4周目の11となり、1の方が大きいのでtop1には4が入ります。
5周目の11となり、1の方が大きいのでtop1には5が入ります。
最終的にtop1には5が入ります。
そして、1の箇所でtop1の値がworld1に代入されます。
number[world1]のworld1には一番大きい配列のインデックス番号が入っているので、1となり、89が出力されます。
次の例は配列の要素をメソッドに渡して、その値をメソッド内で変更した時に元の配列はどうなるかについて説明します。11 結果は「444444」です。
配列をメソッドに渡すときには値渡しではなく、参照渡しになります。
変数をメソッドに渡す場合は値渡しです。
呼び出し元の配列numberをrt配列に渡していますが、このrt配列をkakikaeメソッド内で変更するとnumber配列の値まで書き替えることができます。
これが参照渡しになります。
変数を渡す値渡しの場合はメソッド側でその変数の値を書き替えることが出来ません。
例ではnumber配列の要素である1をkakikaeメソッドの中のrt配列に渡してすべて4を代入していますが、このようにメソッド側で配列の値を変えることで、呼び出し元の配列の要素もすべて1に変更されます。
次の例では呼び出し元の変数をメソッド側で書き替えることができるか(書き替えることは出来ませんが)見てみましょう。11 kakikae(x,y,z);の箇所で引数をkakikaeメソッドに送っています。
これは値渡しで渡しています。
そして、kakikaeメソッドで以下のように4を代入しています。
a=4;
b=4;
c=4;
ここで変数に4を代入しても、呼び出し元のx 、y、z の値は変更されず1のままです。
つまり、値渡しの場合はメソッド側でその変数の値を書き替えることが出来ません。1 その場合には呼び出し側の引数もカラにしてメソッドを呼び出します。1

カテゴリー
C言語

関数について知ろう

この章では関数について説明します。
関数とは入力したデータ(引数)に基づいて、決められた処理を行い、戻り値という結果を返す機能を持っています。
関数の仕組みはエクセルの関数の仕組みと意味は同じです。111 この章以前の関数は「組み込み関数」と言いまして、C言語によって始めから用意されている関数です。
例えばprintf関数は文字列を出力する関数ですが、C言語でそのような働きを作ってくれています。
組み込み関数の他にC言語では自分で好き勝手に1を作ることができます。
これを「ユーザー定義関数」と言いますが、この関数の作成方法をこの章で説明していきます。
例えば消費税額を自動で計算する関数を自分で作りたいとします。その場合、商品のお金を関数に渡すと関数は商品金額に消費税額を掛けた処理をして、その金額を返すという関数を作ることになります。
関数の構文は以下の通りですが、これを「関数の定義」と呼びます。1 〇引数とは関数が利用するデータのことを言います。
〇関数の中の引数は左端から第1引数,第2引数と順番に数えていきます。
また1個以上の引数を記述する場合はカンマで区切ってください。引数がない場合には1を入れます。
〇returnを記述するときは1という形で書きます。
またreturnは省略できます。returnの詳細は後ほど説明します。
main関数も関数の一種ですが、他にも色々な関数を作ることができます。
main関数は特別で他にどんな関数を作っても一番初めに実行される関数です。
次に関数の実行方法について説明します。
関数はmain関数を除いて関数を定義しただけでは何も動きません。
関数を実行させるためには関数を呼び出す必要があります。
そして、呼び出すことによって関数の中身が実行されます。1 では1番簡単な例から、見てみましょう。1 初めに、プログラムの流れから見てみます。
① main関数とhello関数がありますが、初めに実行されるのはmain関数です。
main関数の中では上から順にプログラムは流れていきます。
ですので、初めに1が実行されます。
②次にhello();を実行します。
関数名に「()」を付け、hello関数を呼び出しています。
hello関数内では1を実行して「こんにちは」を出力します。

③hello関数を実行し終えたのならばmain関数に戻ってきて、プログラムを終了します。1
では関数の構文を詳しく説明します。
初めに「戻り値の型」について説明します。11 関数とは入力したデータ(引数)に基づいて決められた処理を行い、戻り値という実行結果を返す機能を持っていますと説明しましたが、その戻り値の型を関数名の左側に書きます。
戻すための値がない場合には1と書きます。1次に引数について説明します。11 void hello(void)の2つ目のvoidは引数が無いと言う意味です。
つまり、関数の呼び出し元から渡されてくる引数が無いということです。
この例の場合は1の箇所でhello関数を呼び出していますが、引数がカラです。

次は関数名について説明します。
関数名には「hello」と名前が付いていますが、名前の付け方にもルールがあります。
1つ目は1文字目は数字で始めることはできません。
つまり、3nという名前はつけることはできません。
1文字目は
「アンダースコア(_)」
「aからz」
「AからZ」のどれかで書きます。
2つ目は2文字目からは
「アンダースコア(_)」
「aからz」
「AからZ」
「数字」が使えます。
3つ目は31文字まで名前を付けることが出来ます
4つ目は予約語を使うことができません。
5つ目は基本的には小文字で書いてください。

次は関数についての注意点について説明します。
関数の定義は関数の呼び出しよりも前に定義しなければいけません。
つまり、先ほどの例で説明すると1はmain関数の中にあるので、main関数よりhello関数を後ろに書いてはいけないということです。
以下の書き方はエラーです。1
次は引数のある関数についての説明をします。11 プログラムの流れをみてみましょう。
①初めに実行されるのはmain関数です。
「int a=2,b=3;」で変数の宣言と初期化を行っています。
次に1を実行します。

②次に「tashizan(a,b);」の箇所でtashizan関数を呼び出します。
初めの例では1のようにカッコの中の引数はカラでしたが、この例ではtashizan関数に渡す値をa,bという引数で設定しています。
この呼び出し側のカッコの中の引数を実引数と言います。

③次にtashizan関数を実行します。
この関数の中の引数を仮引数と言います。
tashizan関数が呼び出されたのならば1のaの部分がtashizan関数の1の部分にセットされ、1のbの部分がtashizan関数の1の部分にそれぞれセットされます。
つまり、2が1に入り、3が1に入ります。
その後に関数内部のプログラムが実行されます。1 tashizan関数を実行し終えたのならばmain関数に戻ってきて,1でプログラムを終了します。
1111しかし、実引数と仮引数の型が違う場合には型変換の規則に従って自動的に変換されます。
型変換の規則については説明済みですが転載します。11
次は戻り値のある例を見てみましょう。1111111 tashizan関数の中で足し算の計算がされて、変数zにその結果を代入しています。11 このようにreturnは関数の呼び出し元に戻り値を返す役割があります。
では、どのような時に戻り値を返すのか?
それは呼びだし側であるmain関数内でその値を活用したい場合に戻り値を返します。1 この例の場合はreturnで返されるzはint型なのでtashizan関数の戻り値の型もintにしてください。1