※この記事は『Mac Fan 2020年1月号』に掲載されたものです。
Apple純正の表計算ソフトである「Numbers」。表を作ると、ヘッダ行(見出し)が行番号1となり、データ行は2行目から始まる。そのため、ランキング表などを作るときは、第1位が行番号2、第2位が行番号3と1つずつずれてしまう。
なぜ、「Numbers」などの表計算ソフトは行番号を1から始めるのだろうか。これが今回の疑問だ。
iWorkはすばらしい。しかし「Numbers」には言いたいことがある
AppleのPages、Numbers、KeynoteといったiWorkを愛用されている方は多いと思う。Microsoft Officeほど高機能ではないが、必要にして十分な機能があり、使い方はいたってシンプル。Microsoft Officeがマニュアル車だとすれば、iWorkはオートマ車のイメージだ。
Office書類との互換性には限界があるものの、iWorkで書類を作ると自然にシンプルでミニマムなレイアウトになっていくので、意外とOfficeとの互換性で大きな問題は起こらない。書類を共有して編集するというのでなければ、PDFで渡すという最終手段もある。社内でどうしてもOffice文書をやりとりする必要があるというのでなければ、iWorkで十分に事足りる。
しかし、 Numbersには、個人的に1つだけ気に入らない点がある。それはスプレッドシートの行番号が1から始まることだ。デフォルトで表を作成すると、最初の行(行番号1)はヘッダ行になり、データは次の行(行番号2)から入力していくことになる。たとえば、トップ10ランキングのような表を作ることを考えていただきたい。第1位は行番号2に、第2位は行番号3に入るので、データの順番と行番号がずれてしまうのだ。
10個のデータが入る表を作成したい場合、表の右下をドラッグして行番号10が表示される大きさまで広げれば、作業はスムースだ。しかし、Numbersでは10個のデータを格納するのに、行番号11まで広げなければならない。
大したことではないといえばそのとおりなのだが、大したことがないゆえに、そのことに気を取られることは作業に悪影響を与える。Apple製品の素晴らしいところは、そういう些細なことに気を取られず、作業の本質に集中をさせてくれるところなのだ。
「0始まり」はプログラミング言語を背景に持つギークな習慣?
この問題をすっきりさせるには、行番号を0から始めてくれればいい。そうすればヘッダ行が行番号0となり、データが行番号1から入るようになるのでずれが生じなくなる。もちろんヘッダ行が1行とは限らないし、表の途中にヘッダ行を入れる場合もある。しかし、9割以上の表は、ヘッダ行が1行というもののはずだ。
プログラミング言語の多くは、配列の序数を0から始める(BASICやFORTRANなどの教育用言語、古い設計の言語では1から始めるものもある)。これには一定の合理性があるのだが、世間から見ると、いかにも理系的な小難しいルールにように見えることもある。
そこで、ごく一般の人が使うスプレッドシートの場合は、「0始まり」というギークなルールではなくて、「1始まり」という普通の人になじみにあるルールにしたほうがいいとNumbersのデザイナーは考えたのかもしれない。あるいはほかのスプレッドシートも行番号は1から始まるので、それに合わせたのかもしれない。しかし、それでも行番号は0から始めるのが合理的だ。
なぜ0から数え始めるべきか。計算機科学者 エドガー・ダイクストラ氏の考察メモによると
これに関しては、経路探索で最短経路を探索するダイクストラ法を考案したエドガー・ダイクストラ氏が考察メモを公開している(現在は非公開)。「なぜ番号づけは0から始めるべきなのか」というものだ。
ダイクストラ氏は、まず数列を表すときに、「以上、以下」「より大きい、未満」のいずれを使うのが合理的かということをを論じている。2から13までの11個の連続した数の表し方は、以下の4とおり考えられる。
① 2 <= i < 1 3 (2以上、13未満)
② 1 < i <= 1 2(1より大きく、12以下)
③ 2 <= i <= 1 2(2以上、12以下)
④ 1 < i < 1 3(1より大きく、13未満)
このうち合理的なのは、①と②だ。なぜなら、範囲を表している2つの数を引き算すれば、要素の個数がすぐにわかるからだ。③と④では、2つの数の差を求めたあとプラス1をする、あるいはマイナス1をするという操作をしなければならない。こういうところにケアレスミスが入り込む隙が生まれる。プログラミングをした経験のある人なら、ループなどの範囲指定を1だけ間違えて、エラーを起こす、あるいは計算結果がとんでもないものになるという事故を起こしたことがあるはずだ。
さらに、[2, 3, 4]、[5, 6]という2つの数列があった場合、①と②の表し方では、「2以上、5未満」「5以上、7未満」となり、2つの数列が隣接していることがすぐにわかるという利点もある。
では、①と②のどちらがより合理的か。ダイクストラ氏は、①であるという。②の表し方では、[1, 2, 3]を表すときに、「0より大きく、3以下」となってしまって、自然数ではない0を使わなければならない。[0, 1, 2]を表すときには、「−1より大きく、2以下」となってしまい、余計な混乱を与える表記方法になってしまう。1の表し方であれば、「0以上、3未満」となってすっきりする。
この①の表記法がもっとも合理的であるなら、ものを数えるときは、「1つ、2つ…」と数えるのではなく、「0個、1つ、2つ…」と数えたほうがより合理的になる。なぜなら、3つのものを数えるときに、1始まりでは「1以上、4未満」となるが、0始まりであれば、「0以上、3未満」となり、要素の個数が3つであることがすぐに理解できるからだ。
年齢も0歳から数える。意外と身近にある「0始まり」の考え方
物を数えるのに、0から始めるということに違和感を感じる方は多いかもしれないが、私たちはすでにさまざまなところで0始まりの数え方を受け入れている。
たとえば年齢の数え方だ。年齢は生まれたときが0歳で、1年経つと1歳になる。このおかげで、1980年生まれの人は今年2019年には何歳であるかということがすぐにわかる。2019マイナス1980を計算すれば、今年の誕生日で39歳になると判明するのだ。
明治時代までは、数え年齢を使っていた。生まれたときが1歳であり、正月を迎えると年齢が増えていく。太陰暦を使っていた時代はそれなりの合理性があったが、太陽暦を使うようになると、いろいろな不都合が生じるため、0始まりの数え方に改めたのだ。
一方、西暦の数え方は1始まりで、西暦0年は存在しない。そのため2000年には、その年から21世紀が始まるのだと勘違いをした人がけっこういた。1999の4桁の数字がすべて繰り上がって2000になるため、変わった感が強いからだ。多くの人が「ミレニアム」という言葉を持ち出してお祝いムードになった。翌2001年には21世紀が始まるというのに、なんとなく「それ、昨年もやったし」という二番煎じ感があったように記憶している。
イギリスでは“1階”がグランドフロアで、“2階”が1階。同じ考え方をNumbersにも…
イギリスでは、玄関のある1階をグランドフロアと呼び、1つ上がったフロアを1階と呼ぶ。これも一種の0始まりの数え方だ。私たちの感覚からすると、「6階建の建物なのに5階が最上階」となってややこしく感じるが、「地面の上に人工的なフロアを5層追加した建物」と考えればすっきりする。しかも、地下がある場合は、「B2、B1、G、1F、2F」となり、対称性が生まれて美しい。
ときどき、傾斜地に建っているため「出入口は2階です」などという建物があって、帰りに外に出れずまごついてしまうことがあるが、これも出入り口になる玄関をグラウンドフロア(0階)にしてくれると、迷わなくなる。
Numbersなどのスプレッドシートも、行番号を0始まりにしてくれればいいのにと個人的に勝手に思っている。そうすれば、大方の表はヘッダ行が1行なのですっきりと使える。あるいは、ヘッダ行の行番号を「H1、 H2」など別の行番号にしてくれれば、複雑な表であっても要素の個数がすぐにわかるようになる。
行番号の付け方を今さら変更しても、今までのやり方に馴染んでいる人を混乱させるだけなのだろうが、皆さんはどうお感じになるだろうか。
おすすめの記事
著者プロフィール
牧野武文
フリーライター/ITジャーナリスト。ITビジネスやテクノロジーについて、消費者や生活者の視点からやさしく解説することに定評がある。IT関連書を中心に「玩具」「ゲーム」「文学」など、さまざまなジャンルの書籍を幅広く執筆。