意味を変えずに、引っかからない形へ書き直す
隠すのをやめて、書き直すことにしました。記事に載せているサンプルコードのほうを、引っかからない形にします。
条件は1つ、説明として意味が変わらないことです。通すために嘘を書いたら本末転倒になります。
実際に使った3つの書き換えと、その結果。2つは読みやすさが上がり、1つは下がりました。下がったほうをどう扱ったかまで書きます。
第1回:症状の切り分け/第2回:二分探索で原因を絞る/第3回:エスケープが効かなかった理由/第4回:意味を変えずに書き直す(この記事)/第5回:正しく止められたときに何を残すか
1. 文字列の組み立て方を変える
引っかかっていた1つめは、文字列の中に値を埋め込む書き方でした。特別な記号で全体を囲むと、その中に計算結果を差し込めます。
これを、普通の文字列と値をつなぐ形に直しました。
| やっていること | 結果 | |
|---|---|---|
| 元の書き方 | 囲んだ中に値を差し込む | 落ちる |
| 直した書き方 | 文字列と値をつなぐ | 通る |
出来上がる文字列はまったく同じです。ただし、読みやすさは落ちました。埋め込む書き方のほうが、完成形を目で見て確認できます。
ここは正直に書くしかないと判断しました。「この書き方が推奨というわけではありません」という一文を足しています。
書き換えた理由を書かないと、読んだ人が「こちらのほうが良い書き方なのだ」と受け取ります。制約で曲げた場所は、曲げたことを言っておかないと、間違った作法として伝わります。
2. 処理の連鎖を、表にする
2つめは、置き換えの命令でした。文字を別の文字に差し替える処理です。名前に括弧が続いた形が、そのまま引き金になっていました。
元の記事では、この命令を4回つないで書いていました。4つの記号を順に差し替える処理です。
そこで、コードを載せるのをやめて、対応表にしました。
| 元の文字 | 差し替え後 |
|---|---|
| 空白(連続) | 詰めない特別な空白 |
| 小なり | その記号を表す名前 |
| 大なり | その記号を表す名前 |
| アンパサンド | その記号を表す名前 |
4つつないだコードは、順番に目で追わないと何が起きるか分かりません。しかも順番に意味があります(アンパサンドを最初に処理しないと二重に変換されます)。
表にすると、何が何になるかが一目で分かります。結果として、元より良い説明になりました。制約が無ければ表にしていなかったと思います。
3. 条件式に名前をつける
3つめは、判定を書いた行でした。ある文字列が決まった形をしているかを確かめる処理が、引っかかる並びを含んでいました。
直し方は、その判定を定数として外に出して、名前をつけることです。
| 行の中身 | |
|---|---|
| 元 | 判定の条件がその場に書いてある |
| 直した後 | 名前だけが書いてある。条件は上で名前として定義 |
この判定は「時間帯の情報が付いているかどうか」を見るものでした。名前を付けると、条件の中身を読まなくても何を判定しているかが分かります。
ここも、結果として読みやすくなりました。ただし1つ注意が要ります。
あとから記事に一文足しました。「これは自分で付けた名前で、決まった名前ではありません」という断りです。
説明のために付けた名前を、読んだ人が用意されている機能の名前だと思う可能性があります。検索しても出てきません。自分で付けたものは、付けたと書いておく。
3つ並べると
| やったこと | 読みやすさ | |
|---|---|---|
| 1 | 埋め込みを、つなぐ形に | 下がった |
| 2 | 連鎖を、対応表に | 上がった |
| 3 | 条件に名前を付ける | 上がった |
2勝1敗でした。そして2と3は、制約が無ければやっていません。元の書き方で動いていたし、不満も無かったからです。
外から「この形は使えない」と言われたとき、代わりの形を探します。探した結果、元より良いものが見つかることがある。これは制約の副産物であって、制約が良いという話ではありません。1のように、単に悪くなる場合もあります。
この記事自体が、同じ制約の下にある
最後に1つ。この連載は、引っかかる文字の並びを1文字も書けません。書いたら、この記事が登録できなくなります。
そのため、ここまで一度も具体的な記号や命令の綴りを書いていません。全部、言葉で説明しています。
書きにくいかと言うと、そうでもありませんでした。記号を書けないぶん、何をしているかを日本語で説明する必要があります。結果として、その記号を知らない人にも読める形になりました。
今回の学び
まず、制約で曲げた場所は、曲げたと書くということ。理由を書かずに不自然な書き方だけを残すと、読んだ人がそれを作法だと受け取ります。悪くなったほうを隠すと、悪いものが広がります。
次に、代わりの形を探すと、元より良いものが出ることがあること。3つのうち2つは、制約が無ければ手を付けていませんでした。ただし1つは単純に悪くなったので、制約そのものが良いという話ではありません。
そして、記号を書けない説明は、記号を知らない人にも届くこと。書けないので全部言葉にしました。結果として、前提知識が少なくても読める形になっています。制限のほうが読者を広げた場面でした。


