2-1作法とコーディング標準
日曜の夕方、ミナトは通販の送料を自動で計算するプログラムを書き上げました。こむぎ堂の送料は、商品の合計が3,000円未満なら500円、3,000円以上5,000円未満なら300円、5,000円以上なら無料です。閉店後、ミナトはノートパソコンを店長に向けました。店長は画面を上から下までながめて、首をかしげます。「行の始まりがあちこちにずれているし、aとかbとか、何の数なのか分からないよ」。そこへ、試しに入れたお客さんの注文が届きました。合計がちょうど3,000円で、送料が800円になっています。ミナトは相棒に打ち込みました。「どこが間違ってるのか、自分でも読めなくなってきた」
相棒の返事は、間違いを探す前に読める形に直そう、というものでした。プログラムはコンピュータが実行するものですが、直すのは人です。人が読めないプログラムは、間違いを見つけることも、あとから送料の決まりを変えることも難しくなります。そこで、どう書くかの決まりを前もって決めておき、誰が書いても同じ形になるようにします。この決まりをコーディング標準と呼びます。
名前の付け方、行の始まりのそろえ方、説明の書き方などを、チームや組織の中で統一するために定めた規則をコーディング規約といいます。シラバスの「コーディング標準」と同じものを指し、どちらの呼び方も使われます。決まりを守らずに書くと、人によって書き方がばらばらになり、他人のプログラムを読むたびに時間がかかります。直すときに思わぬ所を壊す原因にもなります。
店長が最初に言った「行の始まりがずれている」は、決まりの代表的な項目です。条件分岐や繰返しの中に入る行を、行頭に空白を入れて右へずらし、どこからどこまでが中身かを形で見せることを字下げ(インデンテーション、インデント)といいます。字下げがそろっていれば、「この3行は、合計が3,000円未満のときだけ実行される」と、目で追うだけで分かります。
字下げをそろえても、読みにくさが残ることがあります。「もし」の中に「もし」があり、その中にまた「もし」がある、という具合に、制御構造が何重に入れ子になっているかをネストの深さといいます。深くなるほど、いまどの条件の中にいるのかを覚えておく量が増え、読み違えやすくなります。コーディング標準では「入れ子は3段まで」のように上限を決めておくことがあります。
店長の二つめの指摘は名前でした。a ← b + c と書いてあっても、何を足しているのかは書いた本人にしか分かりません。支払額 ← 商品合計 + 送料 と書けば、店長にも読めます。変数や関数の名前を、意味が分かり、しかも全体で統一された形で付けるための決まりを命名規則といいます。「金額を表す変数は名前の最後を『額』にする」のように決めておくと、名前を見ただけで中身の見当がつきます。
名前だけでは伝わらない事情もあります。「3,000円ちょうどは300円の側に入れる」という決まりは、なぜそうしたのかを書き残しておきたいところです。プログラムの実行には影響せず、人が読むための説明としてソースコードの中に書き添える文を注釈(コメント)といいます。注釈は処理をくり返し言い直すより、なぜそう書いたのかを書くと役に立ちます。
ここから基本情報!使わないと決める命令
コーディング標準には、書き方をそろえる項目のほかに、「この命令は使わない」と決める使用禁止命令の項目もあります。代表的な例が、プログラムの中の任意の場所へ処理を飛ばすgoto文です。どこからでもどこへでも飛べるので、読む人は処理の流れを上から順に追えなくなります。順次・選択・繰返しの組み合わせだけで流れを組み立てる構造化プログラミングでは、goto文の使用を避けます。
基本情報の範囲ここまで
決まりを知ったミナトは、さっそく自分のプログラムの字下げをそろえ、aやbを意味のある名前に付け替え始めました。このように、プログラムの外から見た動作を変えずに、中の構造を読みやすく直しやすい形に整えることをリファクタリングといいます。シラバスは、コーディング標準のねらいとして、プログラムの機能適合性・性能効率性・使用性・保守性を高めることを挙げています。これらはソフトウェアの品質特性の名前で、もとになった JIS X 25010 は2025年に改正され、使用性は「インタラクション容易性(対話性)」に置き換わりました。シラバスの用語例は改正前の名前のままです。リファクタリングが主に高めるのは、そのうち保守性、つまり直しやすさです。
2-2プログラム構造と部品
名前を付け替えてみると、送料の計算が2か所に書かれていることが分かりました。注文の画面と、確認メールを作る部分の両方です。片方の金額だけを直したことがあるのを、ミナトは思い出しました。
同じ計算を何か所にも書くと、決まりが変わったときに全部を直さなければならず、直し忘れが起きます。そこで、プログラムを「送料を求める」「合計を求める」のような機能ごとのまとまりに分け、それぞれを独立したまとまり(モジュール)として作ります。この分け方をモジュール分割といいます。送料を求めるモジュールが1つなら、送料の決まりが変わっても直すのは1か所で済み、ほかのプログラムでも同じものを使い回せます。
ここから基本情報!よい分け方の目安
分け方にはよしあしがあります。モジュールどうしのつながり(結合度)が弱く、1つのモジュールの中身が1つの機能にまとまっている(強度が高い)ほど、モジュールは独立性(モジュール独立性)が高いといいます。送料のモジュールが商品合計だけを受け取って送料だけを返すなら、ほかのモジュールを書き換えても送料のモジュールは影響を受けません。逆に、送料のモジュールが画面の表示やメールの文面まで抱えていると、どこか1つを直すたびに、ほかの所で不具合が出ないかを確かめ直すことになります。
基本情報の範囲ここまで
分けたモジュールは、全体の流れをとりまとめる部分から呼び出して使います。プログラムの実行が始まる所にあり、処理全体の順序を決めて、必要なモジュールを呼び出す中心の部分をメインルーチンといいます。メインルーチンから呼び出されて、決まった処理を受け持つ部分がサブルーチンです。こむぎ堂の通販なら、メインルーチンが「注文を受け取る→合計を求める→送料を求める→確認メールを送る」の順に、それぞれのサブルーチンを呼び出します。
使うモジュールは、自分で作るものばかりではありません。日付の計算、文字の並べ替え、消費税の端数の処理のように、どの店のプログラムでも要る機能は、あらかじめ作られて配られています。汎用的な機能をまとめ、ほかのプログラムから呼び出して使えるようにした部品の集まりをライブラリといいます。多くの人が使って確かめてきたライブラリを使えば、同じものを一から書く手間も、書き間違える心配も減ります。
ほかのソフトウェアの機能を呼び出すための窓口として、呼び出し方と受け取れる結果を取り決めたものをAPI(Application Programming Interface)といいます。この窓口をインターネット越しに使えるようにしたものがWebAPIです。HTTPで決まった形の問合せを送ると、結果が返ってきます。配送業者がWebAPIを用意していれば、こむぎ堂のプログラムから届け先の住所を送って、届く日の見込みを受け取ることができます。
そもそもソースコードをたくさん書かずに作る方法もあります。画面の上でボタンや入力欄を並べたり設定したりする操作を中心にして、足りない所だけ少しソースコードを書いてアプリケーションを作る方法をローコードといいます。ソースコードをまったく書かず、画面の操作だけで作る方法はノーコードです。予約の受付フォームくらいなら、ノーコードのサービスで店長が自分で作れるかもしれません。
2-3データ型と変数
送料のサブルーチンを書き始めたミナトは、商品合計を入れる箱、送料を入れる箱、クール便かどうかを入れる箱を用意しました。相棒は「それぞれの箱に、どんな種類の値が入るかを先に決めておこう」と言います。合計に「三千円」という文字が入ってしまったら、足し算はできません。
プログラムの中で値を入れておく、名前の付いた箱を変数といいます。変数に入る値の種類と、その値に使える演算を定める区分をデータ型といいます。データ型を決めておくと、合計に文字を入れようとしたような誤りを、実行する前や実行した時点で見つけられます。代表的なデータ型は次の4つです。
| データ型 | 入る値 | こむぎ堂の例 |
|---|---|---|
| 整数型 | 小数部のない整数 | 商品合計 3000、注文の個数 2 |
| 実数型 | 小数を含む数 | 荷物の重さ 1.25(kg) |
| 論理型(ブーリアン型) | 真(true)か偽(false)のどちらか | クール便か:true |
| 文字型 | 1文字 | サイズの記号 'S' |
論理型の変数がとる2つの値、真(true)と偽(false)を論理値(ブール値)といいます。「クール便か」「在庫があるか」のように、答えが「はい」か「いいえ」の二つしかないものを表すのに使います。表計算ソフトでも、セルに入る値の種類として、数値や文字列と並んで論理値(TRUE と FALSE)があります。
ここから基本情報!まとまりや場所を表す型
文字型が1文字を表すのに対し、「食パン」「くるみパン」のように複数の文字が連なった文字列を扱うデータ型を文字列型といいます。商品名や届け先の住所は文字列型の変数に入れます。
1件の注文には、商品名(文字列型)、個数(整数型)、クール便か(論理型)と、型の違う値がいくつも含まれます。こうした異なる型の項目を1つにまとめて、1つの型として扱えるようにしたものを構造型(構造体)といいます。「注文」という型を作っておけば、注文1件を変数1つで受け渡せます。
値そのものではなく、値が置かれているメモリ上の場所(アドレス)を値として持つデータ型がポインタ型(ポインタ)です。大きな注文のデータを丸ごと写して渡す代わりに、「そのデータはメモリのこの場所にある」という情報だけを渡せます。第1章のリストは、次の要素の場所をポインタでたどる形で作れます。
中のデータがどう並んでいるかを利用者から隠し、使える操作だけを見せる形で定義したデータ型を抽象データ型(ADT)といいます。たとえばスタックを「積む」「取り出す」の2つの操作だけで使えるように定義すれば、使う側は、中身が配列で作られているかリストで作られているかを気にせずに済みます。中の作りを変えても、操作の名前と働きが同じなら、使う側のプログラムは書き直さなくてよくなります。
基本情報の範囲ここまで
変数に値を入れる操作を代入といいます。試験の擬似言語では 商品合計 ← 0 のように、矢印の左の変数へ右の値を入れる形で書きます。商品合計 ← 商品合計 + 380 は、数学の等式としては成り立ちませんが、代入としては「いまの商品合計に380を足した値を、商品合計に入れ直す」という意味になります。0から始めて食パン340円とくるみパン380円を順に足すと、商品合計は340、720と変わっていきます。
2-4式と演算
名前を整えたプログラムを読み直すと、送料を決める部分は次の3行になっていました。ミナトは指で1行ずつなぞりながら、合計がちょうど3,000円のときを頭の中で試します。2行目にさしかかったところで、指が止まりました。
| 行 | 書いてあること |
|---|---|
| 1 | 送料 ← 0 |
| 2 | もし 商品合計 <= 3000 なら 送料 ← 送料 + 500 |
| 3 | もし 商品合計 >= 3000 かつ 商品合計 < 5000 なら 送料 ← 送料 + 300 |
値や変数を記号で結び付けた、計算すると1つの値になる書き方を式といいます。送料 + 500 は式で、送料が0なら500という値になります。式の中で、どんな演算をするかを表す記号を演算子といいます。+ や × のような計算の記号も、< や >= のような大小を比べる記号も演算子です。
ここから基本情報!計算する演算と比べる演算
足し算・引き算・掛け算・割り算のように数値を計算する演算を算術演算といいます。割り算の余りを求める演算も含まれ、1,000円で380円のくるみパンを買えるだけ買うと、商は2個、余りは240円です。式に演算子がいくつも並ぶときは、掛け算・割り算が足し算・引き算より先に計算されます。くるみパン2個と送料500円を 380 × 2 + 500 と書くと、先に 380 × 2 の760を求め、それに500を足して1,260になります。
2つの値が等しいか、どちらが大きいかを判定する演算を比較演算(関係演算)といいます。結果は真か偽のどちらかになります。<(より小さい)と <=(以下)は、境目の値で結果が分かれます。商品合計が3000のとき、商品合計 < 3000 は偽、商品合計 <= 3000 は真です。
基本情報の範囲ここまで
2行目の「もし」の後ろにある 商品合計 <= 3000 のように、計算すると真か偽のどちらかになり、処理を分ける判定に使う式を条件式といいます。ミナトの指が止まった理由も、条件式にありました。商品合計が3000のとき、2行目の条件式「3000以下」は真なので500円が足されます。3行目の条件式も、3000は「3000以上」に入るので真になり、さらに300円が足されます。3,000円ちょうどの注文にだけ、2つの送料が重なって800円になっていたのです。
3行目の「かつ」のように、真偽の値どうしを組み合わせる演算を論理演算といいます。「かつ」(AND)は両方が真のときだけ真、「または」(OR)はどちらか一方でも真なら真、「でない」(NOT)は真と偽を入れ替えます。3行目は「3000以上」と「5000未満」がどちらも真のときだけ300円を足す、という意味になります。直すには、2行目を「3000未満」(商品合計 < 3000)にして、2つの条件式が同時に真にならないようにします。
ここから基本情報!ビットごとの演算
数値を2進数で表し、ビット1つずつにANDやOR、XOR(排他的論理和)をかけたり、ビットの並びを左右にずらす(シフトする)演算をビット演算といいます。商品の性質を、左から「冷蔵」「予約できる」「季節限定」「卵を使う」の4ビットの印で持たせたとします。ある商品の印が0110なら、0100とANDをとった結果は0100で、0でないので「予約できる」の印が立っていると分かります。0011(10進数の3)を左に1ビットずらすと0110(10進数の6)になり、値は2倍になります。
基本情報の範囲ここまで
2-5制御構造と入出力
2行目を「3000未満」に直しても、ミナトはまだ落ち着きません。3つの場合のどれか1つだけが選ばれる、という決まりが、「もし」を並べた書き方からは読み取りにくいからです。相棒は、処理の流れの組み立て方には決まった形がある、と教えてくれました。
処理の流れは、上から順に1つずつ実行する順次、条件によって実行する処理を選ぶ選択、同じ処理を何度も実行する繰返しの3つの形を組み合わせて作れます。3つの形だけで組み立てたプログラムは、上から読んでいけば流れが追えます。送料の決め方は、このうち「選択」の形で書くのが自然です。
ここから基本情報!条件で道を分ける
条件式が真か偽かによって、実行する処理を分ける制御構造を選択処理(分岐処理、条件分岐)といいます。擬似言語では「if(条件式)…elseif(条件式)…else…endif」の形で書き、上の条件から順に調べて、最初に真になった所の処理だけを実行します。送料なら「if(商品合計 < 3000)送料 ← 500、elseif(商品合計 < 5000)送料 ← 300、else 送料 ← 0」と書けます。3000は1つめの条件で偽になり、2つめで真になるので、送料は300円だけです。どれか1つしか選ばれないことが、書き方そのものから読み取れます。
基本情報の範囲ここまで
商品合計を求める部分には、もう1つの形が使われています。注文には食パン、くるみパン、バゲットのように明細が何行もあり、その数は注文ごとに違います。明細を1行取り出して金額を足す、という同じ処理を、明細がなくなるまで何度も実行する制御構造を繰返し処理(反復処理、ループ)といいます。食パン340円、くるみパン380円、バゲット420円の3行なら、繰返しを3回まわって商品合計は340、720、1,140と増えます。繰返しを終える条件を書き忘れると、処理がいつまでも終わらなくなります。
プログラムは、外から値を受け取り、結果を外へ渡して初めて役に立ちます。キーボードや画面のフォーム、ファイルなどから値を受け取る入力と、画面やファイル、プリンタへ結果を渡す出力をまとめて入出力(I/O)といいます。送料のプログラムなら、注文の明細が入力で、画面に表示する送料と支払額が出力です。
通販の画面では、お客さんがいつ「カートに入れる」ボタンを押すかは決まっていません。そこで、ボタンのクリックやキーの入力のような出来事(イベント)が起きるのを待ち、起きたときにそれに対応する処理を呼び出す方式をとります。これをイベントドリブン(イベント駆動)といいます。「カートに入れる」が押されたら商品合計と送料を計算し直す、という処理を、ボタンに結び付けておくわけです。
2-6手続と関数
選択処理で書き直した送料の決め方を、ミナトは1つのまとまりにして呼び出せるようにすることにしました。注文の画面からも確認メールからも、同じものを呼べば同じ送料が出るはずです。相棒が尋ねます。「それには何を渡して、何を返してもらう?」
一連の処理の手順をまとめて名前を付け、ほかの所から呼び出せるようにしたものを手続(プロシージャ)といいます。手続は呼び出されると決まった処理をしますが、結果を値として返すとは限りません。「確認メールを送る」のように、処理をすることそのものが目的の場合もあります。これに対し、値を受け取って処理し、結果の値を返すものを関数といいます。送料を求める処理は、商品合計を受け取って送料を返すので、関数にするのが向いています。
関数や手続を呼び出すときに渡す値を引数(パラメータ)、処理が終わったときに呼び出し元へ返される値を戻り値(返り値)といいます。送料を求める関数に引数として3000を渡すと、戻り値として300が返ってきます。呼び出す側は 送料 ← 送料を求める(商品合計) と書くだけで、中で何をしているかを知らなくても送料を受け取れます。
ここから基本情報!変数が使える範囲と、引数の渡し方
関数の中だけで作って使う変数を局所変数(ローカル変数)といいます。局所変数は、それを定義した関数やブロックの中でしか使えず、関数の処理が終わると消えます。プログラムのどこからでも使える大域変数(グローバル変数)とは違い、関数の中で同じ名前の変数を書き換えても、外の変数には影響しません。関数の中の計算が外を書き換えないので、関数どうしの独立性が保たれます。
引数の渡し方にも種類があります。手続「値引き(x)」が x から100を引くとして、商品合計3000を入れた変数を引数にして呼び出す場面で比べます。
呼び出し元の値を写し取って渡す方式を値呼出しといいます。手続の中の x は写しなので、x が2900になっても、呼び出し元の商品合計は3000のままです。値が入っている記憶場所そのものを渡す方式は参照呼出しです。x と商品合計は同じ場所を指しているので、x を2900にすると、呼び出し元の商品合計も2900に変わります。
このほかに、引数の式を計算せずに式のまま渡し、手続の中でその引数が使われるたびに計算し直す名前呼出しがあります。商品合計 + 送料 を名前呼出しで渡すと、手続の途中で送料が変われば、次に引数を使うときの値も変わります。呼び出すときには値を渡さず、手続が終わるときに、手続の中の引数の最後の値を呼び出し元の変数へ書き戻す方式は結果呼出しです。名前呼出しは、いまよく使われている言語ではほとんど見かけない方式です。
基本情報の範囲ここまで
2-7オブジェクト指向プログラミング
送料の関数ができると、店長は次の注文を出しました。「パンごとに、名前と値段と、税込みの値段が出せるといいね。予約のパンは表示に『予約』って付けて」。商品は40種類あります。ミナトは、パン1つずつについて同じことを書くのは避けたい、と考えました。
データと、そのデータを扱う処理をひとまとめにしてプログラムを組み立てる考え方を、オブジェクト指向といいます。「パン」というひな形を作っておけば、食パンも、くるみパンも、そのひな形から作れます。このひな形をクラス、ひな形から作った1つ1つの実体(食パン、くるみパン)をインスタンスといいます。
クラスの中で定義し、インスタンスごとに持たせるデータを入れる変数をメンバ変数(フィールド)といいます。パンのクラスなら「名前」と「値段」がメンバ変数で、食パンのインスタンスは「食パン」「340」を、くるみパンのインスタンスは「くるみパン」「380」を、それぞれ自分のメンバ変数に持ちます。クラスの中に定義した処理をメソッドといい、「税込みの値段を求める」は、自分の値段に税を加えて返すメソッドとして書けます。
ここから基本情報!クラスを作る・使い分ける
インスタンスを作るときに自動的に呼び出され、メンバ変数に最初の値を入れるなどの準備をする特別なメソッドをコンストラクタといいます。パン("食パン", 340) のように書くとコンストラクタが動き、名前に「食パン」、値段に340が入ったインスタンスができます。
同じクラスの中に、同じ名前で、引数の型や個数が違うメソッドをいくつも定義できる仕組みをオーバーロード(多重定義)といいます。「代金を求める()」は1個分、「代金を求める(個数)」は個数分の代金を返す、というように、渡した引数の形によってどちらが呼ばれるかが決まります。
予約のパンは、パンのクラスを受け継いだ(継承した)予約パンのクラスとして作れます。名前・値段・税込みの値段の求め方はパンのクラスからそのまま受け継ぎ、違う所だけを書き足します。上位のクラスにあるメソッドを、下位のクラスで同じ名前・同じ引数のまま定義し直すことをオーバーライドといいます。予約パンのクラスで「表示する」をオーバーライドすれば、予約パンだけが「予約 シュトーレン」のように表示されます。
クラスを組み合わせる方法は継承だけではありません。「朝食セット」のクラスが、食パンとバゲットのインスタンスを中に持つとします。全体が部分を持ち、全体がなくなれば部分もいっしょになくなる強い持ち方をコンポジションといいます。セットを取り消せば、その中のパンもセットの一部としてはなくなります。
朝食セットの値段を求めるとき、セットのクラスがパンの値段の計算をもう一度書く必要はありません。中に持っている食パンとバゲットに「税込みの値段を求める」を頼み、返ってきた値を足せば済みます。このように、処理を自分で書かずに、ほかのオブジェクトに任せてその結果を使うことを委譲といいます。税の計算の決まりが変わっても、直すのはパンのクラスだけです。
基本情報の範囲ここまで
2-8Webプログラミング
送料の関数を通販のページに組み込む段になって、ミナトは迷いました。この関数は、お客さんのスマートフォンの中で動かすのか、店のサーバで動かすのか。どちらでも送料は出せそうですが、どちらがよいのかが分かりません。
Webのしくみでは、ページを求めるブラウザの側をWebクライアント、求めに応じてページを返す側をWebサーバと呼びます。プログラムは、そのどちらにも置けます。サーバに置けば、注文の記録や在庫の数のように、店の側で持っておくべきデータを扱えます。ブラウザに置けば、ボタンを押したときの反応をサーバとのやりとりなしにすぐ返せます。
ここから基本情報!サーバの側で動かす
Webサーバの側で動く処理を書くことをサーバサイドプログラミングといいます。注文を受け付けて記録する、在庫の数をデータベースから読んで、そのときの在庫を載せたページを組み立てて返す、といった処理です。送料も、最後に請求する金額はサーバの側で計算し直します。ブラウザで動くプログラムはお客さんの手元で書き換えられるおそれがあるので、ブラウザから届いた送料をそのまま信じるわけにはいかないからです。
ブラウザからの求めを受け取ってページやデータを返すソフトウェアがWebサーバのソフトウェアで、その代表が、Apache Software Foundationが開発しているオープンソースのApache(Apache HTTP Server)です。サーバサイドのプログラムは、こうしたWebサーバのソフトウェアと組み合わせて動かします。
基本情報の範囲ここまで
一方、お客さんが個数を変えるたびに送料と支払額の表示が変わるのは、ブラウザの側で動くプログラムの役目です。ページ全体を読み込み直さなくても表示が変わるので、お客さんは待たずに済みます。
ここから基本情報!ブラウザの側で動かす
クライアントの側にも処理を受け持たせて、操作しやすい画面を作る方式をリッチクライアントといいます。画面の組み立てや入力の確かめをクライアントで行うので、サーバの負担が減り、操作への反応も速くなります。
ブラウザの中のプログラムが、画面を表示したままサーバと通信し、受け取ったデータでページの一部だけを書き換える技術をAjax(Asynchronous JavaScript and XML)といいます。通信の結果を待つあいだも画面は止まらない(非同期)ので、届け先の郵便番号を入れたら住所の欄だけが埋まる、という動きが作れます。名前にXMLとありますが、いまはJSONでデータを受け渡すことが多くなっています。
ブラウザの側の画面を作る作業は量が多いので、よく使う仕組みをあらかじめまとめた枠組みを使います。これをフロントエンドフレームワークといい、ReactやVue.jsが知られています。ボタンや一覧のような画面の部品の作り方や、データが変わったときに表示を更新する仕組みをフレームワークが受け持つので、作る人はこむぎ堂の画面に固有の部分に集中できます。
基本情報の範囲ここまで
水曜の閉店後、ミナトは書き直したプログラムを店長に見せました。字下げがそろい、変数には「商品合計」「送料」と名前が付き、送料の決め方は「送料を求める」という関数1つにまとまっています。3,000円ちょうどの注文を入れると、送料は300円と出ました。店長は画面をスクロールしながら言います。「これなら私にも、どこで何をしているか分かるね」
日曜の夕方に見つかった800円の送料は、2つの条件式が3,000円という境目で重なっていたために起きていました。直したのは「以下」を「未満」に変え、重ならない選択処理の形に組み直した所です。ただ、その誤りを見つけられたのは、先に字下げと名前を整えて、プログラムを読める形にしていたからでした。読める形に整える作業は動作を変えず、動作を変える修正はその後で、狙った所だけに行う。この順番を守ったので、直した所以外の動作が変わっていないことも確かめやすくなりました。送料の決め方を変えたくなっても、これからは関数1つを直せば済みます。
店長には、まだ気になることがあるようです。「ところで、このプログラムは何という言葉で書いてあるの。英語みたいな所と日本語みたいな所があるけど」。ミナトは、いま書いている言語をなぜ選んだのかを、うまく説明できませんでした。