11. 標準ライブラリ(道具箱)
JSON、乱数、日時、正規表現など、すぐ取り出して使える道具を知りましょう。
この章で学ぶこと
- 道具箱(モジュール)から道具(関数)を取り出して使う方法(
持ってこよう)- よく使う道具箱5つ: 数学、JSON、乱数、日時、正規表現
道具箱から取り出して使う
9章で関数を自分で作りましたね。切り上げ、ランダムな数を選ぶ、日付の計算のように、多くの人がよく使う関数は、カナデがあらかじめ作って道具箱に入れてあります。この道具箱をモジュール、モジュールを集めたものを標準ライブラリといいます。
〈数字に〉のようにいつも使ういくつかを除いて、道具は使う前に持ってくる必要があります。モジュールはすみつきかっこで書きます。
【数学】から〈切り上げ〉を持ってこよう
〈切り上げ〉(3.2)を出力しよう
【数学】から〈切り上げ〉を持ってこよう—【数学】の道具箱から〈切り上げ〉を取り出します。- そのあとは、9章の関数と同じように
〈切り上げ〉(3.2)と書きます。4が出ます。
持ってくる方法はいくつかあります。
| 書き方 | 意味 |
|---|---|
【数学】から〈切り上げ〉を持ってこよう |
1つだけ |
【数学】から〈切り上げ〉と〈切り捨て〉を持ってこよう |
いくつも(とでつなぐ) |
【数学】から全部持ってこよう |
そのモジュールの道具を全部 |
【数学】から〈切り上げ〉を〈上へ〉に持ってこよう |
別の名前(別名)で |
【数学】から〈切り上げ〉と〈切り捨て〉を持ってこよう
【数学】から〈切り上げ〉を〈上へ〉に持ってこよう
〈切り上げ〉(3.2)を出力しよう
〈切り捨て〉(3.8)を出力しよう
〈上へ〉(1.1)を出力しよう
4、3、2が出ます。別名は、自分で作った関数と名前がぶつかるときに使います。持ってこないで使うと「関数が見つかりません」というエラーになるので、このエラーを見たら、まず持ってきたかを確かめてください。
この章で見る道具箱
| モジュール | できること | 道具 |
|---|---|---|
【数学】 |
切り上げと切り捨て(もっと多くの計算は12章) | 〈切り上げ〉 〈切り捨て〉 |
【JSON】 |
JSONの文字列と値の変換 | 〈パース〉 〈文字列化〉 |
【乱数】 |
ランダムな値を選ぶ | 〈実数〉 〈整数〉 〈選ぶ〉 〈シャッフル〉 |
【日時】 |
時刻を扱う | 〈今〉 〈書式〉 〈読み取り〉 〈曜日〉 〈待つ〉 |
【正規表現】 |
文字のパターンを探す | 〈検査〉 〈検索〉 〈グループ〉 〈全検索〉 〈置換〉 〈分割〉 |
全部は便利ですが、別のモジュールから同じ名前の道具を持ってくると、後のものが前のものを上書きします。名前がぶつかりそうなときは、必要なものだけを選んで持ってきてください。
JSON
JSONは、プログラムどうしがデータをやりとりするときによく使う文章の形式です。Webから受け取るデータの多くはJSONです。{"名前": "はな"}のように、カナデの辞書・リストとほとんど同じ形をしています。
〈パース〉はJSONの文字列をカナデの値に変えます。オブジェクトは辞書、配列はリスト、nullは空っぽになります。逆に〈文字列化〉は値をJSONの文字列にします。辞書のキーは文字列でなければならず、文字の順に並びます。2つ目の引数にインデントの幅を渡すと、読みやすく広げてくれます。
【JSON】から〈パース〉を持ってこよう
【JSON】から〈文字列化〉を持ってこよう
『文』を「{"名前": "はな", "点数": [90, 80]}」にしよう
『値』を〈パース〉(『文』)にしよう
『値』の「名前」を出力しよう
『辞書』を{「b」: 2, 「a」: 真}にしよう
〈文字列化〉(『辞書』)を出力しよう
〈文字列化〉(『辞書』, 2)を出力しよう
カナデの文字列はかぎかっこで囲むので、JSONの"はそのまま書けます。
乱数
〈実数〉()は0以上1未満の数、〈整数〉(最小, 最大)は2つの数の間(両端を含む)の整数を返します。〈選ぶ〉はリストから1つ選び、〈シャッフル〉は混ぜた新しいリストを返します(元のリストはそのままです)。実行するたびに結果が変わります。
【乱数】から〈整数〉を持ってこよう
【乱数】から〈選ぶ〉を持ってこよう
【乱数】から〈シャッフル〉を持ってこよう
『サイコロ』を〈整数〉(1, 6)にしよう
枠「サイコロは{『サイコロ』}が出ました。」を出力しよう
『メニュー』を【「カレー」, 「ラーメン」, 「うどん」】にしよう
枠「今日は{〈選ぶ〉(『メニュー』)}!」を出力しよう
〈シャッフル〉(『メニュー』)を出力しよう
日時
時刻は、1970年1月1日から経った秒(数字)で扱います。〈今〉()が現在の時刻を返し、〈書式〉(時刻, 書式)で文字列に、〈読み取り〉(文字列, 書式)でまた時刻に戻せます。書式ではYYYY(年)、MM(月)、DD(日)、HH(時)、mm(分)、ss(秒)だけが置き換わり、ほかの文字はそのままです。コンピューターに設定されたタイムゾーンを使います。〈曜日〉(時刻)は、曜日を月曜日の1から日曜日の7までの数字で教えてくれます。「2月30日」のように存在しない日付を読み取るとエラーになります。〈待つ〉(秒)は、その時間だけプログラムを止めて待ちます(0秒から3600秒まで、小数も使えます)。ブラウザのプレイグラウンドでも、画面が固まらずに待ちます。
【日時】から〈今〉を持ってこよう
【日時】から〈書式〉を持ってこよう
【日時】から〈読み取り〉を持ってこよう
『時刻』を〈読み取り〉(「2024-03-05 07:08:09」, 「YYYY-MM-DD HH:mm:ss」)にしよう
〈書式〉(『時刻』, 「YYYY年MM月DD日」)を出力しよう
『今』を〈今〉()にしよう
枠「今は{〈書式〉(『今』, 「HH:mm:ss」)}です。」を出力しよう
〈待つ〉でゆっくり数えることもできます。
【日時】から〈待つ〉を持ってこよう
「3」を出力しよう
〈待つ〉(0.3)を実行しよう
「2」を出力しよう
〈待つ〉(0.3)を実行しよう
「1」を出力しよう
〈待つ〉(0.3)を実行しよう
「発射!」を出力しよう
正規表現(少し難しいです)
「数字が続いている部分」「@が入っている単語」のように、文字の形(パターン)で探すときは正規表現を使います。正規表現はそれ自体が小さな言語なので、最初はなじみにくいです。今は飛ばして、必要になったときに戻ってきてもかまいません。道具はどれも先に(文字列, パターン)を受け取ります。
〈検査〉: パターンがあるかを真/偽で教えます。〈検索〉: 最初に合った文字列を返します。なければ空っぽです。〈グループ〉: 最初に合った文字列と、( )で囲んだ部分をリストで返します。〈全検索〉: 合った文字列をすべてリストで返します。〈置換〉: 合った所を別の文字列に置き換えます。置き換える文字列の中の$1、$2は囲んだ部分、$$はドル記号です。〈分割〉: 合った所で区切って、リストで返します。
【正規表現】から〈検査〉を持ってこよう
【正規表現】から〈全検索〉を持ってこよう
【正規表現】から〈グループ〉を持ってこよう
【正規表現】から〈置換〉を持ってこよう
【正規表現】から〈分割〉を持ってこよう
〈検査〉(「abc123」, 「[0-9]+」)を出力しよう
〈全検索〉(「a1b22c333」, 「[0-9]+」)を出力しよう
〈グループ〉(「2024-03-05」, 「([0-9]+)-([0-9]+)-([0-9]+)」)を出力しよう
〈置換〉(「山田 鈴木」, 「([^ ]+) ([^ ]+)」, 「$2 $1」)を出力しよう
〈分割〉(「りんご, みかん,ぶどう」, 「, ?」)を出力しよう
正規表現は、GoとJavaScriptが共通で使える文法だけが使えます。文字列の何もない所に合う場合(空の文字列に合うパターン)は、〈全検索〉、〈置換〉、〈分割〉では無視されます。先頭に(?i)(大文字小文字を無視)、(?m)、(?s)を付けてオプションを指定できます。
一緒に使ってみよう: 月曜日をからかう
いくつものモジュールをまとめて持ってくると、こんなものも作れます。〈曜日〉(時刻)は、月曜日が1、日曜日が7の数字を返します。明日が月曜日なら、【JSON】で読み込んでおいたからかいの言葉の中から1つを【乱数】で選んで聞かせます。
【日時】から〈今〉を持ってこよう
【日時】から〈曜日〉を持ってこよう
【乱数】から〈選ぶ〉を持ってこよう
【JSON】から〈パース〉を持ってこよう
『からかい』を〈パース〉(「["明日は月曜日ですって…週末はもう伝説になりましたね。", "月曜日が近づいてきます!目覚ましの音を先に聞いておきましょう。", "明日は月曜日!お布団の外は危険ですよ。"]」)にしよう
『明日』を(〈今〉() + 86400)にしよう
『曜日番号』を〈曜日〉(『明日』)にしよう
もし(『曜日番号』が1と同じだ)なら:
〈選ぶ〉(『からかい』)を出力しよう
それ以外なら:
「明日は月曜日ではありません。今日はからかうネタがありませんね。」を出力しよう
まとめ
| やりたいこと | 書き方 |
|---|---|
| 道具を持ってくる | 【モジュール】から〈道具〉を持ってこよう |
| いくつも/全部 | 〈あ〉と〈い〉を持ってこよう、【モジュール】から全部持ってこよう |
| 別の名前で | 〈道具〉を〈新しい名前〉に持ってこよう |
| ランダムな整数 | 【乱数】の〈整数〉(1, 6) |
| 今の時刻を文字に | 【日時】の〈書式〉(〈今〉(), 「HH:mm」) |
| JSON ↔ 値 | 【JSON】の〈パース〉、〈文字列化〉 |
練習問題
1. サイコロを2つ振って、2つの目と合計を出力してみましょう。
答えの例
【乱数】から〈整数〉を持ってこよう
『あ』を〈整数〉(1, 6)にしよう
『い』を〈整数〉(1, 6)にしよう
枠「{『あ』} + {『い』} = {『あ』 + 『い』}」を出力しよう
2. お昼のメニューのリストを作って、その中から1つをランダムに選び、「今日のお昼は○○!」と出力してみましょう。
答えの例
【乱数】から〈選ぶ〉を持ってこよう
『メニュー』を【「おにぎり」, 「ラーメン」, 「とんかつ」, 「カレー」】にしよう
枠「今日のお昼は{〈選ぶ〉(『メニュー』)}!」を出力しよう
3. 下のJSONの文から、2人目の友だちの名前を取り出して出力してみましょう。
『文』を「[{"名前": "はな"}, {"名前": "そら"}]」にしよう
答えの例
【JSON】から〈パース〉を持ってこよう
『文』を「[{"名前": "はな"}, {"名前": "そら"}]」にしよう
『友だち』を〈パース〉(『文』)にしよう
((『友だち』の2番目)の「名前」)を出力しよう
次の章では、もっと多くの道具箱(統計、テキスト、リストの道具など)を見て回ります。