カテゴリー
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です」

カテゴリー
C言語

関数で星座判定を作ってみよう

「if文で星座の判定をしよう」の章ではif文で星座判定のプログラムを作成しましたが、このプログラムを関数を使って書き換えてみましょう。1111 この例にはポインタ、関数、グローバル変数が含まれていますので、理解を深めてください。11111例えばmonthに1が入り、dayに19が入っているとします。
そうすると1の箇所はiが0の時にifの条件式がtrueになりますので、以下の入れ子のif文の条件式の判定に入ります。1 「day <= day1[i]」の中のdayには19が入り、1にはday1の0番目の要素である19が入っていますので、条件式はtrueになり、nameにはnames配列の0番目の要素であるやぎ座が入ります。
例えばdayに19ではなく23が入っていると仮定すると1はFALSEになるので、1の条件式の判定に入ります。
ここで1にはday2の0番目の要素である31が入っていますのでTRUEになり、name には1に該当する星座が入ります。
1周目では1のiには0が入っていますので1で余りを求めると1になりますので1となり,みずがめ座が入ることになります。
では1の説明をします。
「(i + 1)」の箇所の説明をしますと例えばmonthが1で、day が23の場合には11になりFALSEになるので、1のブロックに入りますが、1月は やぎ座と水瓶座しかなく、やぎ座ではないのならば水瓶座しかないのでnames配列を1つ進めるために1で1を足しています。
「%12」を記述している理由は例えば1の中のiに11が入ると1の箇所が12になりますが、1の箇所がないと仮定すると1となってしまいますが、実際に1という要素はありません。
そこで1で余りを0(12割る12で余り0)にして「やぎ座」が出るようにしています。
つまり、以下の余りの数字がnames配列の添え字になり、その該当するデータがnameに入ります。1 1グローバル変数ですので、プログラムの中のどこからでも使用することが出来ます。
そして、最後にmain関数の中でnameに入っている星座を出力しています。1 結果は以下の通りです。1

カテゴリー
C言語

関数のプロトタイプ宣言を知ろう

この章では関数のプロトタイプ宣言について説明します。
関数の定義は関数の呼び出しよりも前に定義しなければいけませんでしたが、関数のプロトタイプ宣言をすることで、このような制約は無くなります。
つまり関数の定義(この例ではhello関数)は関数の呼び出しよりも後に定義することができるということです。
では例をみてみましょう。1 関数のプロトタイプ宣言は以下の通りです。111 次の例は引数がdouble型の関数のプロトタイプ宣言を行っています。11 引数のあるプロトタイプ宣言の場合には以下のように関数の引数を入力して宣言を行います。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

カテゴリー
C言語

C言語の基礎を知ろう1

この章ではC言語の基礎を説明していきます。11つまり、「stdio.h」がないと puts関数、printf関数、scanf関数などは使用することができません。
「stdio.h」はヘッダーファイルと呼ばれていますが、ヘッダーファイルには1という拡張子が付いています。
1#include」はプログラムに他のファイルを入れたい時に使います。1 「#include」はプログラムの先頭で使用してください。
この例では「stdio.h」と「stdlib.h」の2つのファイルを取り込んでいます。1 注意点としては1は以下のように途中で改行するとエラーになりますので気を付けてください。1 以下が代表的なヘッダーファイルです。11111エクセルをご存知の方はわかると思いますが、例えばエクセル関数にSUMと言う関数が有りますが、この関数は指定した範囲のデータに基づいて足し算を行う関数です。
例えば指定した範囲のデータが1であるならば結果(戻り値)は「15」です。
このように決められた機能を実行して結果を返すのが関数の役割です。
では以下の例について説明します。1 この例の関数名はmainですが、C言語で最初に実行されるのはmain関数です。
このmain関数は必ずプログラムに1つは必要です。
そして、実行内容はブロックの中に書いていきます。
ブロックは以下の図をみていただくと分かりますが1から1までです。
基本的にはそのブロック内ではプログラムは上から下へ実行されていきます。1 戻り値の型やvoidの説明は「関数について知ろう」で詳しく説明します。
今はmain関数の形だけを覚えておいてください。
ここで何点か注意していただきたいことがあります。
ここではputsの意味などは分からなくても結構ですので、C言語での最低限のルールを説明します。11 上の赤枠の箇所にスペースがありますが、これはプログラムを読みやすくするためにあります。このスペースのことをインデントと言います。
インデントは入れなくてもいいですが、入れるとプログラムが読みやすくなります。
そして、インデントは必ず半角で開けてください。1 intやmainなどプログラムの骨格に書く文字は全て半角で入力して下さい。
上の例は「int」「main」が全角になっていますのでエラーになります。
しかし、1など出力する文字は全角でも半角でもエラーにはなりません。1 このように関数名の途中で改行してはいけません。
また1のように関数名に空白を入れるのもエラーになります。
11このコメントの部分はプログラムには影響しません。
つまり、コメント部分は出力されません。
1行でコメントする場合は1がコメントになります。
複数行の場合は1から1までの間にコメントを書いてください。
しかし、以下のように1行のコメントのために使用してもいいです。1 以下にコメントの例を載せましたので、参考にしてください。11 puts関数はカッコの中の文字列を表示させる関数です。
「文字列」とはダブルクォートで囲まれたデータを指します。
関数については以下のように説明しました。
「エクセルをご存知の方はわかると思いますが、例えばエクセル関数にSUMと言う関数が有りますが、この関数は指定した範囲のデータに基づいて足し算を行う関数です。
例えば指定した範囲のデータが1であるならば結果(戻り値)は「15」です。」
この例の場合にはputsに1という引数を与えるとその引数を出力する機能を持ちます。
この関数に与えるデータのことを引数と言います。
puts関数の具体的な説明は次の章でします。1 文の終わりには必ず1を付けてください。
日本語でも文の終わりには「。」を付けますが、これと同じ意味です。1 この記述はmain関数の終わりには必ず付けてください。
main関数は問題なく処理を終えた場合に1を返します。
これは文字通り「処理が成功しました」と言う意味です。
もしくは1の代わりに以下のように0を入れても同じ意味になります。11

カテゴリー
Perl

Perlの基礎を知ろう

この章ではPerlの基礎について説明します。1 プログラムは基本的には先頭から順番に実行されていくというのが基本です。1 11プログラムを書く前にTeraPadであれば表示メニューの中の編集モードをPerlにしてください。
書き終わりましたらファイルを保存しますので、TeraPadの「ファイル」の中の1をクリックします。
クリックしますと以下のダイアログボックスが開きますので文字コードを「UTF-8N」を選択してOKを押してください。1 OKを押しますと以下のダイアログボックスが開きますので、ファイル名に好きなファイル名を入力します。
この時、拡張子は必ず1にしてください。
つまり、1と書きます。
そして、ファイルを保存する場所は1です。2015-05-02_203000 保存しましたら、ブラウザのURLを入力する箇所に以下のように入力します。
ファイル名は自身で決めたファイル名を入力します。1 実行するとブラウザにプログラムの内容を表示させることが出来ます。
表示する時に文字化けが起こるのならばブラウザのエンコードが他の文字コードになっていますので、これを変更します。
windows7の場合で説明しますと初めに画面の上で右クリックします。クリックしますとメニューが開きますのでその中のエンコードを1に変更してください。
これで文字化けは直ります。
では先頭から解説します。1 「c:/perl/bin/」の場所にプログラムを翻訳してくれるActivePerlがあることを示しています。
レンタルサーバを借りて、webページを動かすときにはレンタルサーバの業者により、ここの記述は違うので、Perlのパスを確認してください。
例えば以下のサーバー業者ではサイトのQ&Aに書いてあります。1 1ここはCGIヘッダーと呼ばれる部分でCGIプログラムを実行する場合、初めにCGIヘッダーを送る規則になっています。
「Content-type」の右側は送信されたデータがどのような内容のものなのかを示しています。
この例のようにテキスト形式(文字情報だけ)で出力するのであれば1を指定します。
HTML文書として出力したい場合、以下のように1を入力します。
つまり、CGIヘッダーはこれから送るのはテキスト形式ですよ。
もしくはHTML形式ですよと宣言する役割を持っています。
「text/html」の例は以下の通りです。1 1$cats, $number1 ,$number2など文字の先頭に$が付いた形式をスカラー変数もしくはただ単に変数と呼びます。
スカラーとは11などのことを言いますが、そのスカラーというデータを入れている変数なので「スカラー変数」と呼ばれているわけです。
次に変数について説明します。
変数とは何かしらのデータを入れる箱みたいなものです。
バッグを例に取るとバックには財布やハンカチを入れて持ち運びますが、そのバックに当たるものが変数です。
そして、このバッグに入っている財布やハンカチがデータに該当します。
もしくは、変数とはフロッピーディスクみたいなもので、その中にデータを記憶させておくことが出来ます。1 変数には名前を付けなくてはいけないのですが、この例でいいますとcats、number1 、number2が変数名です。
$と変数名が付いた形式で初めて変数になります。
この例では変数名にcats、number1 、number2と付けましたが、名前を付ければ何でもいいというのではなく、一定のルールがあります。
1つ目は$の次の1文字目は数字で始めることはできません。
例えば$3catsという名前は付けることはできません。
2つ目は$の次の1文字目は
「アンダースコア(_)」
「aからz」「AからZ」が使えます。
3つ目は$の次の次からは
「アンダースコア(_)」
「aからz」「AからZ」、
「数字」が使えます。
4つ目は同じ文字でも大文字と小文字は全く別の変数になります。
例えば$catsと$CATSは全く違う変数になります。
また、変数名には「入れるデータに関連した名前」にして誰が見てもわかりやすくしましょう。
猫に関連しているのなら$catsなどと付けます。

次に変数へのデータの入れ方について説明します。
例の「$cats=”三毛猫”;」に「=」と言う記号がありますが、これを代入演算子と言います。数学のイコールとは関係ありません。
代入演算子は右辺のデータを左辺に入れる役割があります。
例で説明しますと$catsと言う変数に1と言うデータを入れるという意味です。
このデータを入れる行為を「代入」と言います。
注意してほしいことは同じ変数に他のデータを代入してしまうと後から代入したデータで上書きされますので注意してください。
例えば以下の例では「三毛猫」を「どら猫」で上書きしてしまいます。1 次はシングルクォートとダブルクォートについて説明します。
「三毛猫」「犬」のような文字列を変数に代入するには1もしくは1で文字列を囲まないといけません。
ダブルクォートもしくはシングルクォートで囲まれたものは文字でも数字でもすべて文字列になります。
例えばダブルクォートもしくはシングルクォートで文字列を囲まないで1のように書きますとエラーになります。
1のように数字を変数に代入する場合にはダブルクォートもしくはシングルクォートで数字を囲む必要はありません。

次に文の末尾のセミコロンについて説明します。1 文の終わりにセミコロン「;」が付いていますが、これは日本語の文章の「。」と同じ意味で、文の終わりを意味します。
文の終わりにはセミコロンを必ず付けてください。1 「print」という文字がありますが、これは文字列を出力する関数です。
関数とはエクセルを学習したことがある人はわかると思いますが、Perlの関数の仕組みはエクセルの関数の仕組みと意味は同じです。
例えばエクセル関数にSUMと言う関数が有りますが、この関数は指定した範囲のデータに基づいて足し算を行う関数です。
例えば指定した範囲のデータが3,5,7であるならば結果は15です。
SUMには初めから指定した範囲の足し算を行うと言う仕組みが備わっています。
つまり、エクセルの内部機構でSUMの機能は指定した範囲の足し算を行うと言うプログラムがされていると言うことです。
これが関数の意味です。
Perlにもあらかじめ機能が決められている関数が有ります。
その数多くの関数の中の一つがprint関数ですが、この関数には「文字列を出力する機能」がPerlの内部機構により初めから決められています。print関数は以下のように括弧で囲んでもいいです。
つまり括弧があってもなくてもどちらでもいいです。1 次に文字列の中に変数を入れるときの注意点について説明します。1

1 のように文字列の中に変数が含まれている場合はダブルクォートで文字列を囲ってください。
ダブルクォートで囲うことによって、変数の中に入っている値を表示させることが出来ます。
これを変数展開と呼びます。
この例の場合は$catsの中に代入されている三毛猫と$number1に入っている2、そして$number2に入っている3が出力されます。
つまり、1 を出力しますと
三毛猫を2匹飼っています
三毛猫を3匹飼っています
と出力します。
上の例の1は改行を意味しています。
例えば1を外しますと
1のように改行しないで出力されます。
また、文字列が含まれていない、つまり変数だけの1のような文の場合には変数をダブルクォートで囲う必要はありませんが、以下のようにダブルクォートで囲っても問題ありません。1 では次のように変数が含まれている文字列をシングルクォートで囲んだらどうなるでしょうか?1 結果は1という文がそのまま出力されます。シングルクォートは囲ったものをそのまま表示します。
つまり、$catsに代入されている三毛猫と言う文字と$number1に代入されている2と言う数字が変数展開されなくなるので注意が必要です。

ここで気を付けてほしいことを説明します。
例えば以下の例のように1に変えて出力させようと思っても結果は1となってしまいます。
原因は$number1hikiが変数として認識されてしまうからです。1 これを正しく出力させるために書き換えますと以下のようになります。1 解決方法は変数名を1で囲んでください
これで正しく1と出力されます。

では今度はprint文を今までとは違う形で書く2つの方法について説明します。1 今までは上の例のように文全体をダブルクォートで囲んでいましたが、これを別な方法で書き換えると以下のようになります。1 この書き方はドット「.」で文字列と文字列を連結する方法です。1 このドットは「文字列演算子」と言いまして、ドットの右辺と左辺の文字列を連結する働きがあります。
ここで少し疑問に思った人がいるかもしれませんが、ドットは文字列同士を連結する演算子なのに$number1には数字の2が入っています。そこでPerlは数字の2を文字列の1に自動的に変換します。
これは文字列連結演算子を使う場合にはドットの右辺と左辺の値を文字列として扱うためです。1 変数と文字列の間をカンマ「,」で区切る方法です。
この方法は変数と文字列の間だけではなくて、変数と変数の間をカンマで区切ることもできます。1