明日から役立つ?プログラマーの考え方講座 その11
「受け渡し」と「受け渡しの約束」

こんにちは。鳥井雪です。
ヒューマンアカデミー こどもプログラミング教室の教材監修をしています。
このコラムでは、プログラマーが日常でどんなことを考えて生活や仕事をしているのかを紹介し、みなさんにもプログラミングを身近に感じてほしいと思っています。

今回はプログラミングにしょっちゅう登場する考え方、「受け渡し」と「受け渡しの約束」についてお話しします。

プログラミングにおける「受け渡し」とは?

みなさんは「受け渡し」というと何を思い浮かべますか?
リレーのバトンの受け渡し?それとも、何やら怪しげなスパイの機密情報の受け渡しを思い浮かべた方もいらっしゃるでしょうか。プログラミングの世界では、「受け渡し」といえばほぼ、データの受け渡しです。そういう意味では、リレーよりもスパイに近いかもしれません。しかしスパイはスパイ同士で情報を受け渡しますね。プログラミングはどうでしょう。もちろん、プログラムとプログラム、アプリとアプリの間でデータを受け渡します。

以前のコラムで、「大きな仕事を小さな仕事に分割する」ことについてお話ししました。その時に、「小さな仕事に分けた後は、大きな仕事にもう一度まとめる必要がある」と触れました。そのまとめた流れの中で、小さな仕事から小さな仕事へ、こちらはリレーのように引き継ぎを可能にするのが、データの受け渡しなのです。

具体的なプログラムをイメージしてみましょう。ユーザーの入力した1から12の間の数字を受け取り、その数字を月として、去年のその月の晴れの日の日数を表示するプログラムです。一つのパソコンの中で動くプログラムということにしましょう。パソコンのアプリからユーザーは数字をタイプします。結果もそのアプリの画面に表示されます。去年の1日ずつのお天気情報は、パソコンの中のファイルに書かれています。

まずプログラムが持つ小さな仕事は、次のようになります。

a. アプリから、入力された1から12の数字を受け取る
b. パソコンにあるファイルから、去年のその月の1日ごとのお天気情報を取ってくる
c. 晴れの日を数え上げる
d. 結果をアプリに送って、アプリに表示するよう頼む

上から順にやっていけばいいのですから、簡単そうです。
上のaからbの間の、データの受け渡しに注目してみましょう。まず、ユーザーは10月の晴れの日を知りたいと思って、10と入力したとしましょう。

  • - まず、aからbには、10月というデータが受け渡されます。bの仕事は、どの月の情報を取ってくればいいか分からないとできませんからね。
  • - bからcには、「10月分のお天気の情報」が受け渡されます。
  • - cからdには、数え上げた結果の日数が渡されます。

「データの受け渡し」というもののイメージ、なんとなく形になったのではないでしょうか。それぞれの仕事は、その仕事を始めるのに必要な情報を受け取って、次の仕事を始めるのに必要な情報へと変えて、それを次の仕事に引き継ぐのです。

「受け渡しの約束」とはなんでしょう?

仕事aとbについて考えてみてください。aはユーザーの入力を受け取る、bは指定された月のお天気情報をファイルに読みに行く、という仕事です。ユーザーはキーボードで入力するので、1から12以外の文字、0でもいいですし、「おはよう」なんて文字も入力できます。

しかし、aがbに「0」なんて数字を渡したら、仕事bは何月のお天気情報を取ってくればいいか分からなくて困ってしまいますね。ですからaとbの間には、「1から12の間の数字だけを受け渡す」という約束を作ります。そうして、それ以外の入力がユーザーから来た場合にどうするか(例えば、もう一度ユーザーに正しい入力を促すとか)も、プログラムの中に書くのです。

仕事2と3でも、「お天気情報」というものがどういう形で受け渡されるかの約束が必要そうですね。たとえば、「10月の日数分のお天気データが1日目から31日分順番に並んでくる、お天気の種類は”晴れ”、”曇り”、”雨”のどれか」などです。

ということでプログラマーはプログラミングをするときは

というのを意識しているわけです。

一つのプログラムの中だとデータの受け渡しのやり方の大部分は自分の裁量ですが、自分が作ったのではないプログラムやアプリとデータを受け渡しすることもあります。例ではアプリの入力を受け取ったり、アプリに表示を頼んだり。お天気情報をファイルに読みに行くのも実はそうですし、場合によっては、お天気情報はインターネット上の「気象情報サイト」にあって、インターネットを通じて気象情報サイトが用意した形式で問合せをすると、気象情報サイトが用意した形式でお天気情報が返ってくる、ということもよくあります。

逆の立場で、別のアプリからの問い合わせを受けて、データを返すプログラムを作る場合もあります。この時は、「どんな形で問い合わせを受けるか」「どんな形でデータを返すか」をこちらで決めて、別のアプリに伝えることになります。

その時に、問い合わせの形や返答データの形が毎回安定しなかったり、一ヶ月くらいでころころ変わってしまうと、問合せをする方はとても困ります。例えば天気のデータが晴れなら「”晴れ”」という文字で返ってくるはずだったのに、ある日いきなり「”晴”」という文字になってしまったら、それだけで受け取る方のプログラムは動かなくなってしまいます。外部プログラムや外部アプリとの「受け渡しの約束」は、しっかり考えて、後から変更ができるだけないようにしなければならないので、なかなか頭を使います。

日常生活の中の「データの受け渡し」

さて、わたしが日常生活の中で、「データの受け渡しの形」がしっかりしてるなーと常々関心しているもの、それは保育園の連絡帳です。朝の体温、就寝時間と起床時間、前日の夕食と本日の朝食、お風呂に入ったか、機嫌など。保育士さんが子どもの状態をさっと把握して保育業務に入るための、過不足ない項目が並んでいます。きっと長い間保育の現場で積み上げられてきた知見の結晶なのでしょう。

わたしの子どもたちの通う保育園の連絡帳は紙ですが、これがアプリになっても尋ねる項目はほぼ変わらないのではないでしょうか。みなさんも、自分がどんなデータを、誰と、どんな形でやりとりしているのか、という目で自分の生活をみてみてください。きっといろいろな発見があると思いますよ。

一覧ページへ戻る