この章では変数に関する補足をします。
変数の宣言は「同じ型名」であれば複数の変数を以下のようにまとめて書くことが出来ます。
まとめて書く方法は2つあります。 変数名1と変数名2と変数名3が同じ型名であればまとめて宣言することができます。
その後はそれぞれデータを入れていきます。
では例をみてみましょう。
aとbとcが同じ型なので、まとめてint型で宣言しています。 変数名1と変数名2と変数名3が同じ型名であれば、まとめて宣言すると同時に変数を初期化することができます。
この構文の場合も、型名は先頭のみに付けます。
月: 2015年5月
この章では変数について説明します。
変数とはデータを入れることができる入れ物に似ています。
例えば携帯電話やフロッピーディスクにデータを記憶すると持ち運びが出来ますが、この携帯電話やフロッピーディスクに相当するものが変数です。
変数にデータを入れながら、プログラムを書いていくのが基本です。
では例で詳しく説明します。 「データ型名 変数名;」という構文を「変数の宣言」と言います。
データ型は「データ型について知ろう」で説明します。
この例では以下が変数の宣言です。 変数を使用するためには必ず変数の宣言が必要です。
つまり、「これからこの変数を使用しますよ」と宣言するのが変数の宣言です。
変数には名前を付けなくてはいけないのですが、この例ではaが変数名です。
本に関係しているプログラムであればbookなどと変数名を付けます。
この例では変数名にaと付けましたが、名前を付ければ何でもいいというのではなく、一定のルールがあります。 予約語とはすでにC言語の言語仕様で機能が定義されている単語のことです。
次の表が予約語です。
以後、学習が進んでいくうちに予約語は自然と覚えますので、ここでは覚えなくても結構です。 次に「データ型名」について説明します。 変数の前に「int」が付いていますが、これがデータ型です。
変数を使用するにはまず初めに『この変数は何型の変数です』と宣言しなければいけません。
データ型については「データ型について知ろう」で詳しく説明しますが、簡単に言いますとどのようなデータを変数に入れるのかにより型名は変わります。
この例では整数の2を変数aに入れているので、intを使用しています。 これまで変数の宣言について説明してきましたが、次の例で変数の宣言の注意事項について説明します。 変数の宣言は必ず関数の先頭で行ってください。
つまり、例のように宣言の前に余計なものがありますとエラーになります。
この例は「int a;」の前にが書いてありますので、エラーです。
次は変数へのデータの入れ方について説明します。
変数の宣言が終わりますとデータを入れることが出来ますが、以下の構文でデータを入れます。 変数を宣言してから、データを入れるというのが基本です。
データ型名は変数の宣言の箇所のみ付けてください。
例の「a=2;」の中にと言う記号がありますが、これを代入演算子と言います。
数学の「=」とは関係ありません。
代入演算子は右辺のデータを左辺に入れる役割があります。
例で説明しますとaと言う変数に2と言うデータを入れるという意味です。
この入れる作業を「代入」といいます。
注意してほしいことは以下のように同じ変数に他のデータを代入してしまうと後から代入したデータで上書きされますので注意してください。 つまり、結果は「変数の値は2です変数の値は20です」となりますが、整数のaに代入されていた2がの箇所で20に上書きされます。
変数には1つしかデータを入れることができないことを覚えておいてください。
ここで変数に関しての補足をしておきます。 他の入れ方としては以下の構文のように変数の宣言と同時にデータを入れることもできます。 これを変数の初期化と言います。
入れるデータのことを初期値と言います。
例えば先ほどの例は以下のように書き換えることができます。 どちらの方法でデータを入れても結構です。 次は先ほどの例の以下の箇所を説明します。 printfについては以前、説明しましたが、その時にはのようにprintfの中の引数は文字列でした。
しかし、整数を出力させようと思ってと書いても出力することはできません(エラーになります)。
の3の部分をダブルクォートで囲んでと書けばエラーにならず出力はできますが、数値をダブルクォートで囲むと整数ではなくなって、文字列として出力されることになります。
では、整数型の数値を整数として出力させるにはどうしたらいいか。
それは例にあるようにという変換指定子を使います。
この例の変換指定子はaの値をの箇所に置き換えます。 このように数値などのデータを文字列に変換して表示させたい時に変換指定子を使います。
ここで大事なのはと書いて出力されるのは変数の中に入っているデータであり、aという変数名が出力されるわけではありません。
つまり、この例ではaに入っている2というデータが出力されます。
つまり、結果はになりますが、と出力されるのではありません。
では変換指定子の基本構文について説明します。 〇「テンプレート」はダブルクォートで囲んでください。
そして、このテンプレートの中に文字列と変換指定子を自由に組み合わせて記述します。
テンプレートとは「型」と言う意味なのでという型で出力しますという意味です。
変換指定子はたくさんありますが、はint型の数値である整数を出力するときに使います。
基本構文の「変数」の箇所は変数ではなくても、直接数値などを指定してもいいです。 では他の例をみてみましょう。
これまでの例ではprintfの中の変換指定子は1つでしたが、以下の通り複数の変換指定子を設定できます。 変数と「変換指定子」の対応関係は以下の通りです(スペースの都合でprintfの引数を2行で書いていますが、1行で書いていただいても結構です)。 テンプレートの一番左側の変換指定子と変数側の一番左の変数は対応関係にあります。
テンプレートの真ん中の変換指定子と変数側の真ん中の変数は対応関係にあります。
テンプレートの一番右の変換指定子と変数側の一番右の変数は対応関係にあります。
変数と変換指定子の数は合わせて書いてください。
エスケープシーケンスについて知ろう
この章ではエスケープシーケンスについて説明します。
エスケープシーケンスとは、ダブルクォートやシングルクォートなどC言語において文字列として入力することができない特殊な文字をを使って表現します。
「C言語の基礎を知ろう2」で説明したもエスケープシーケンスの1つです。
エスケープシーケンスは以下の通りです。 では例をみてみましょう。
はタブを入れますので、結果はです。
次の例をみてみましょう。 ダブルクォートの中にダブルクォートは入れられないのでエスケープシーケンスを使います。
C言語のダブルクォートは文字列を囲むという機能がありますので、これをとして表示させるのがの役割です。
を入れないと、以下のように解釈されてしまうのでエラーになります。 結果はです。
次の例をみてみましょう。 文字としてを入れたい場合にはを使用します。
結果はです。
C言語の基礎を知ろう2
この章ではputs関数について説明します。
puts関数は文字列を出力させる関数ですが、基本構文は以下の通りです。 〇出力させたい文字列はで囲んでください。
また、このカッコの中のデータを引数と言います。
〇ダブルクォート自体は出力されません。
puts関数はカッコの中の文字列を出力させる関数と言いましたが、もっと詳しく言いますと改行を入れながら文字列を表示させる関数です。
例えば以下のようにputsを2つ並べたプログラムがあるとします。 もし、改行しないで出力したい場合にはprintf関数を使います。 〇 printf関数は文字列を出力する関数ですが、puts関数と違うのは改行を入れないで文字列を出力させることです。
〇出力させたい文字列をputs関数と同じようにダブルクォートで囲んで記述してください。 printf関数で出力する時に改行を入れたい場合にはと言う特殊な文字を使います。
HTMLのと同じ機能を持ちます。
では例をみてみましょう。 次の例をみてみましょう。 1つのprintfの中に2か所、改行文字がありますが、このように複数の箇所にを使用することが出来ます。
C言語の基礎を知ろう1
この章ではC言語の基礎を説明していきます。つまり、「stdio.h」がないと puts関数、printf関数、scanf関数などは使用することができません。
「stdio.h」はヘッダーファイルと呼ばれていますが、ヘッダーファイルにはという拡張子が付いています。
「#include」はプログラムに他のファイルを入れたい時に使います。 「#include」はプログラムの先頭で使用してください。
この例では「stdio.h」と「stdlib.h」の2つのファイルを取り込んでいます。 注意点としてはは以下のように途中で改行するとエラーになりますので気を付けてください。 以下が代表的なヘッダーファイルです。エクセルをご存知の方はわかると思いますが、例えばエクセル関数にSUMと言う関数が有りますが、この関数は指定した範囲のデータに基づいて足し算を行う関数です。
例えば指定した範囲のデータがであるならば結果(戻り値)は「15」です。
このように決められた機能を実行して結果を返すのが関数の役割です。
では以下の例について説明します。 この例の関数名はmainですが、C言語で最初に実行されるのはmain関数です。
このmain関数は必ずプログラムに1つは必要です。
そして、実行内容はブロックの中に書いていきます。
ブロックは以下の図をみていただくと分かりますがからまでです。
基本的にはそのブロック内ではプログラムは上から下へ実行されていきます。 戻り値の型やvoidの説明は「関数について知ろう」で詳しく説明します。
今はmain関数の形だけを覚えておいてください。
ここで何点か注意していただきたいことがあります。
ここではputsの意味などは分からなくても結構ですので、C言語での最低限のルールを説明します。 上の赤枠の箇所にスペースがありますが、これはプログラムを読みやすくするためにあります。このスペースのことをインデントと言います。
インデントは入れなくてもいいですが、入れるとプログラムが読みやすくなります。
そして、インデントは必ず半角で開けてください。 intやmainなどプログラムの骨格に書く文字は全て半角で入力して下さい。
上の例は「int」「main」が全角になっていますのでエラーになります。
しかし、など出力する文字は全角でも半角でもエラーにはなりません。 このように関数名の途中で改行してはいけません。
またのように関数名に空白を入れるのもエラーになります。
このコメントの部分はプログラムには影響しません。
つまり、コメント部分は出力されません。
1行でコメントする場合はがコメントになります。
複数行の場合はからまでの間にコメントを書いてください。
しかし、以下のように1行のコメントのために使用してもいいです。 以下にコメントの例を載せましたので、参考にしてください。 puts関数はカッコの中の文字列を表示させる関数です。
「文字列」とはダブルクォートで囲まれたデータを指します。
関数については以下のように説明しました。
「エクセルをご存知の方はわかると思いますが、例えばエクセル関数にSUMと言う関数が有りますが、この関数は指定した範囲のデータに基づいて足し算を行う関数です。
例えば指定した範囲のデータがであるならば結果(戻り値)は「15」です。」
この例の場合にはputsにという引数を与えるとその引数を出力する機能を持ちます。
この関数に与えるデータのことを引数と言います。
puts関数の具体的な説明は次の章でします。 文の終わりには必ずを付けてください。
日本語でも文の終わりには「。」を付けますが、これと同じ意味です。 この記述はmain関数の終わりには必ず付けてください。
main関数は問題なく処理を終えた場合にを返します。
これは文字通り「処理が成功しました」と言う意味です。
もしくはの代わりに以下のように0を入れても同じ意味になります。
Visual Studioをインストールしよう
これからC言語の学習を始めます。
C言語はAT&Tベル研究所のデニス・リッチー氏により開発されたプログラミング言語です。
C言語は主に電子機器や自動車の内部プログラム言語として使われています。
Cプログラムの作成手順から説明します。
[step1]
初めにテキストエディタでプログラムを書きます。
そのプログラムが書かれたファイルをソースファイルと言います。
そのソースファイルの拡張子はです。
例えばと名前を付けます。
しかし、このままではプログラムは動きません。
次のstep2で説明するコンパイルと言う作業が必要になります。
[step2]
ソースファイルをコンピュータで実行可能な形式に変換します。
その作業をコンパイルと言います。
そして、ソースファイルをコンパイルした結果出来るのが、オブジェクトコードです。
つまりソースコードをコンピュータが実行できるように変換したコードのことです。
[step3]
次にリンクと言う作業を行います。
実際にプログラムを実行させるためにはstep2のオブジェクトコードに「標準ライブラリなどを自動的に結合して作られたファイル」が必要になります。
この結合する作業をリンクと言います。
標準ライブラリとは画面に出力させるprintf関数やscanf関数などの機能を提供するファイルです(標準ライブラリについては後ほど説明します)。
ユーザー認証について知ろう
この章ではユーザー認証について説明します。
ユーザー認証はユーザー名とパスワードを入力しないとwebサイトの中に入ることが出来ない仕組みのことを言います。
限定された人にだけwebサイトを公開したい場合に有効です。
以下のファイルはLesson56.phpです。
Lesson56.phpをLesson53.phpで取り込んでいます。 では初めから説明していきます。 =>とありますが、$_SERVERとはサーバから渡された情報を持った連想配列です。
サーバの情報とは今ページを見ているユーザの IP アドレス、実行中のスクリプトのファイル名、ユーザのブラウザ情報、どのリンクをたどって来たかの情報などのことを言います。
$_SERVERは連想配列と言いましたが、キーはPHPによりあらかじめ決められています。
例えばユーザのブラウザ情報を得たいのであればを使い、実行中のスクリプトのファイル名を得たいのであればを使います。
では戻りまして、ユーザー認証の例を説明します。
以下の箇所ではユーザー認証が必要なwebページにユーザーからのアクセスがあった時、$_SERVERに値が入っているかどうかを確認します。 初めのアクセスではユーザー名もパスワードも入力していないので($_SERVERには値が入っていないので)上のif文の箇所に入ります。
isset関数は値がセットされているかどうかを確認する関数ですが、issetの前には「!」が付いていますので、「値がセットされていないのであれば」と言う意味です。 =>header関数はHTTPヘッダを送る関数です。
以前、クッキーの箇所でリクエストとレスポンスの仕組みを説明しましたが、ユーザーがサーバにこのページに接続したいとリクエストする行為がHTTPリクエストで、そのHTTPリクエストに対してサーバ側がユーザーにレスポンスする行為がHTTPレスポンスです。
HTTPリクエスト、HTTPレスポンスの中で送られているのがHTTPヘッダです。 HTTPリクエストのヘッダは先ほど説明しました$_SERVERによって取得できます。$_SERVERでリクエストヘッダを取得するには以下のようにヘッダ名の前にを付けてください。 =>この中にと言う記述がありますが 、ユーザー側に認証を要求したのに未認証の場合に次のようなダイアログボックスの認証画面を表示させる機能を持ちます。 次に以下の説明をします。 =>これは上の認証画面のキャンセルボタンを押したときにを表示させます。
die関数はメッセージを出力し、プログラムを終了する関数です。
次に上の画面が出ましたら、ユーザー名、パスワードを入力します。
ここでユーザー名、パスワードを入力したのならば下のelse以下の処理に移ります。
ここで入力したユーザー名が に入り、パスワードがに自動的に入ります。
そして、その入力したものと決められているユーザー名、パスワードを照合して、正しければwebページに入ることが出来ます。
間違えたユーザー名やパスワードを入力したのならばもう一度先ほどの認証画面が現れます。
クラスの継承について知ろう
次はクラスの継承について説明します。
「クラスの継承」とは親クラス(元のクラス)の他に「もう1つの関連したクラス」を作ろうとした時に親クラス(元のクラス)のプロパティやメソッドを引き継ぐことを言います。
「もう1つの関連したクラス」のことを子クラスもしくはサブクラスといいます。
親クラスと同じプロパティやメソッドを子クラスで使わなくてはいけない時、同じプロパティやメソッドを子クラスで再度記述する必要はありません。
また、子クラスには子クラス独自のプロパティやメソッドも追加することもできます。
このように「親クラスに使いたいメソッドとプロパティがあって、さらに子クラスに新たなメソッドやプロパティを加えたい」時にクラスの継承を使います。
では例を見てみましょう。
下のファイルはLesson49.phpです。これが親クラスです。 Lesson49.phpのプロパティにはprotectedという修飾子が付いていますが、これは同じクラスか継承クラスからのみアクセスが可能と言う意味です。
仮にこの箇所をprivateに変更しますと子クラスでは使うことが出来ません。
ではLesson49.phpの中のBanksystemクラスをLesson50.phpの中のSecuritiesクラスで継承します。Securitiesの意味は証券という意味です。
設定は銀行口座から株式を買い付け、証券を買ったのなら、その代金を銀行口座から引いて、株式を売ったのならばその代金を銀行口座に入れると言うプログラムです。
以下の例はLesson50.phpです。 require_onceでLesson49.phpを読み込んでいますが、この記述がないとエラーになります。
では子クラスの作成方法について説明します。 子クラス名と親クラス名の間にextendsを付けます。
注意してほしいことは全く違うクラス同士を継承してはいけないことです。
例えば銀行クラスと自動車クラスは関連のないクラスなので、継承関係を作っても意味ありません。
継承関係が正しいかどうか悩む場合には「子クラスは親クラスの子供である」という箇所の子クラス、親クラスに自身で作ったクラス名を当てはめてみて、違和感がないようでしたらそれは正しい継承関係です。
「銀行クラスは自動車クラスの子供である」と聞いてもおかしいと思いませんか?違和感があるようでしたらそれは間違っています(もちろん、意味があれば問題ありません)。
「親クラスは以前違うプロジェクトで作ったけど、今回のプロジェクトで作るクラスと似ているので、親クラスを継承して、足らない部分だけメソッドやプロパティを新たに加えて子クラスを作ろう」という思想でクラスの継承を作る場合が多いです(継承を使えば初めから開発し直す手間が省けますので)。
次はプロパティ、メソッド、コンストラクタの継承について説明します。
など Banksystemクラスのメソッドであるのに、Securitiesクラスで使用できていますが、これは親クラスのBanksystemクラスを継承しているからです。
この他の親クラスのプロパティやメソッドも同じように子クラスで使用することが出来ますが、親クラスのプロパティやメソッドでprivateで指定してあるものは使用することが出来ないので気を付けてください。
親クラスのプロパティやメソッドの他にコンストラクタも継承することが出来ます。
これは親クラスのプロパティを初期化したい場合にはコンストラクタを継承すると便利です。
親クラスのコンストラクタを子クラスで使いたい場合にはという記述が必要です。
「parent::」は親クラスを指しています。
以下のように子クラスのコンストラクタの中に親クラスのコンストラクタを書いてください。次にオーバーライドとは何かについて説明します。
BanksystemクラスとSecuritiesクラスにresultという同じ名前のメソッドがありますが、このように親クラスと子クラスは同じ名前のメソッドを作ることが出来ます。
これをオーバーライドと言いまして、同じ名前のメソッドを作ることによって、親クラスのメソッドより子クラスのメソッドを優先して使うことが出来ます。
子クラスでは親クラスのメソッドと名前が同じでも新たなものを付け加えることができます。
例えばこの例では「株式売却後の」を子クラスのresultメソッドに加えました。
次は子クラス独自のプロパティやメソッドについて説明します。
子クラスには子クラス独自のプロパティやメソッドを書くことが出来ます。
この例で言いますと$companyプロパティ、stockbuy メソッド、stocksellメソッドです。
では最後に出力までの流れを見てみましょう。 =>この部分は継承したプロパティに以下のようにデータを代入しています。
継承したdepositメソッドに10000000を渡します。 子クラスの独自メソッドに購入金額と購入する株式名を渡します。
この時点で「河野自動車株を1000000円購入しました」が出力されます。 最後にresultメソッドで出力します。 結果は「株式売買後の山田銀行の近藤次郎様の残高は9150000」になります。