プログラミング
コーディング標準の目的、データ型と制御構造、関数の引数と戻り値、オブジェクト指向プログラミングの基本概念を理解できるようになります。
ねらい
プログラムを「動く」だけでなく「読みやすく直しやすい」ものにするための基礎を学びます。このレッスンを終えると、コーディング標準の目的、データ型と制御構造、手続・関数の仕組み、オブジェクト指向プログラミングの基本用語を説明できるようになります。
ストーリー
あなたは開発チームに加わり、初めて他人の書いたプログラムを直すことになりました。開いてみると、字下げがそろい、変数の名前から役割がすぐ分かり、迷わず読み進められます。前任者が守っていたのは、チームで決めた書き方のルールでした。プログラムは書く時間より読まれる時間のほうが長いもの。読みやすさを支える決まりごとから見ていきましょう。
プログラミング作法とコーディング標準
チームで統一するプログラムの書き方の決まりをコーディング標準といいます。代表的な項目は次のとおりです。
- 字下げ(インデンテーション)をそろえ、処理の階層を見た目で分かるようにします。
- 繰返しや判定の入れ子であるネストの深さを制限し、複雑になりすぎるのを防ぎます。
- 変数や関数の名前の付け方を命名規則で統一します。
- 誤りを生みやすい使用禁止命令を決めておきます。
こうした作法を守ることは、プログラムの機能適合性・性能効率性・使用性・保守性の向上につながります。逆に守られていないプログラムは、読み違いによる修正ミスや見落としの温床になります。
また、プログラム全体をひとかたまりで書かず、役割ごとの部品に分けることをモジュール分割といいます。全体の流れを受け持つメインルーチンから、個別の処理を受け持つサブルーチンを呼び出す構造にし、部品どうしの結び付きを弱く保つ(独立性を高める)ことが、信頼性と保守性の土台になります。
データ型と変数、演算、制御構造
データ型と変数
変数は、データに名前を付けて入れておく箱です。箱に値を入れる操作を代入といいます。変数には扱うデータの種類を表すデータ型があり、整数型、実数型、真偽を表す論理型、文字型、文字列型が基本です。複数の値をひとまとめにする構造型や、データと操作をセットで定義する抽象データ型もあります。
演算と制御構造
プログラムの計算には、足し算などの算術演算、大小や等しさを比べる比較演算、真偽を組み合わせる論理演算、ビット単位で操作するビット演算があります。
処理の流れは、前のレッスンの流れ図と同じく、順次、条件で分ける選択処理、条件を満たす間繰り返す繰返し処理の組合せで組み立てます。
手続と関数:処理に名前を付けて再利用する
ひとまとまりの処理に名前を付けたものが手続や関数です。呼び出すときに渡す値を引数、処理の結果として返ってくる値を戻り値といいます。たとえば「消費税込みの金額を計算する関数」なら、税抜き金額が引数、税込み金額が戻り値です。
関数の中だけで使う変数を局所変数といいます。局所変数は関数の外から見えないため、ほかの処理への思わぬ影響を防げます。
オブジェクト指向プログラミング
データとそれを操作する処理をひとつにまとめて設計する考え方がオブジェクト指向プログラミングです。設計図に当たるものをクラス、クラスが持つデータをメンバ変数、操作をメソッドといいます。
押さえておきたい基本用語が3つあります。
- コンストラクタは、クラスからオブジェクトを生成するときに呼ばれる初期化の処理です。
- オーバーライドは、親クラスで定義されたメソッドについて、子クラスで同じ名前のまま再定義して上書きすることです。
- オーバーロードは、同じ名前のメソッドについて、引数の型や個数の違いで複数定義することです。
名前が似ているオーバーライドとオーバーロードは混同しやすいので、「上書き(ライド)」と「多重定義(ロード)」の違いとして区別しましょう。
Webプログラミングと文法の表記法
ウェブアプリケーションは、Webサーバ側とWebクライアント(ブラウザ)側の分担で動きます。サーバ側で画面やデータを組み立てる書き方をサーバサイドプログラミングといい、Apacheのようなサーバソフトウェアが土台になります。クライアント側では、ページ全体を読み込み直さずにサーバとデータをやり取りするAjaxという手法や、画面づくりを部品化するフロントエンドフレームワークが使われ、操作性の高いリッチクライアントを実現します。
また、プログラム言語の文法そのものを厳密に定義するには、BNFのようなメタ言語を使います。これは前のレッスンで学んだ形式言語の考え方の実践です。
例題
次の問いに答えてください。
問1 関数を呼び出すときに渡す値と、関数から返ってくる値は、それぞれ何といいますか。
問2 同じ名前のメソッドを引数の型や個数の違いによって複数定義することを何といいますか。
解答と解説
問1について、呼び出すときに渡す値を引数、返ってくる値を戻り値といいます。関数は「引数を受け取り、処理して、戻り値を返す」部品として捉えると整理しやすくなります。
問2の答えはオーバーロードです。同じ名前でも引数の違いで呼び分けられます。親クラスのメソッドを子クラスで再定義するオーバーライドと取り違えないようにしましょう。
応用
本試験を意識した問題を解いてみましょう。
問 オブジェクト指向プログラミングにおいて、親クラスで定義されたメソッドを子クラスで同じ名前のまま再定義することを表す用語はどれでしょうか。次の中から選んでください。
- コンストラクタ
- メンバ変数
- オーバーライド
- オーバーロード
解答と解説
答えは3のオーバーライドです。親クラスのメソッドを子クラスで上書きして、子クラスに合った振る舞いに差し替えます。1のコンストラクタはオブジェクト生成時の初期化処理であり、再定義の仕組みではありません。2のメンバ変数はクラスが持つデータのことで、メソッドの定義とは別の概念です。4のオーバーロードは、同じ名前のメソッドを引数の型や個数の違いで複数定義することであり、親クラスのメソッドの再定義ではありません。
分からなかった点・気になった点
読み込み中です。