以上・以下・未満・???

初めまして。入社してようやく1年経ったかな…というASです。
現場企業の社内で使われるツールの開発、メンテナンスに従事していますが、それに伴って仕様を纏めたり、設計書未満のドキュメントを作ることもあります。
その際に気になるのが、条件記載時の単語の使い方です。

「〇〇の時、△△を行う」
条件式は、プログラムを書く際に必ずといっていいほど出てくるものです。ですが、その条件の書き方・解釈のしかたを間違うと、大変なことになります。
条件式で最も重要なことはしきい値、つまり「処理をする・しないの分岐点」の表現方法です。

様々なケースがあると思いますが、幾つか実体験を交えつつ書いていきたいと思います。

【section 1】以上⇔以下、未満⇔???

「A<=10」「A>=10」
それぞれ日本語で書けば「Aが10以下」「Aが10以上」ですね。「以下」と「以上」は対になる二字熟語です。条件式で大小を問うことは、もはや基本中の基本でしょう。

では「A<10」「A>10」は、日本語でどう書きますか?
1つ目は簡単ですね。「Aが10未満」。2つ目は「Aが10より大きい」と書く人が多いのではないでしょうか。(ちなみに1つ目を「Aが10より小さい」と表記しても正解です)

――じゃあ「未満」と対になる二字熟語は、なに?

答えは「超過」です。「Aが10を超過」などと表現します。

あまり普段耳にしない単語かもしれませんね。
でも「レンタルDVDを返し忘れて超過料金を取られた」なんて言ったり、「無料分のデータ量を超過して課金が必要になった」なんて風に使うことはありませんか? そんな風に使うこともある「超過」が「未満」の対義語です。
なお「超過」の対義語を辞書で調べると「不足」という語も出てきます。あくまで「未満を基準としてみた場合の対義語が超過」となります。(対義語は一対一じゃないところが、日本語の複雑なところですね…)

【section 2】「から」「まで」把握していますか?①

では「超過」という単語を覚えたところで実例に移りましょう。

英語のbetween。「~の間」を意味するこの単語は between A and B などとして、SQLの構文で使う場合があります。
もちろんSQL以外にも使う言語はあるでしょうが、一番分かり易そうなのでSQLをサンプルにします。

user_idを整数値とした時、次の①~③は全て同じ条件を意味しています。

①WHERE user_id BETWEEN 100 AND 200
②WHERE user_id >=100 AND user_id <=200
③WHERE user_id >99 AND user_id <201

まあ③はあまり使わないですね。大体は①か②でしょう。
個人的には=の書き忘れをしないためにも BETWEEN を使う方が良いんじゃないかな~と思いますが、そこは他の条件式との兼ね合いもあるので、一旦は「そういう風に書ける」で留めておくことにします。

さて。この「WHERE user_id BETWEENN 100 AND 200」を日本語で書くと「user_idが100と200の間」「user_idが100以上200以下」「user_id が100から200まで」等となります。

「から」「まで」は、どちらも対象となる値を含みます。「100から200まで」は100も200も対象です。
今回サンプルとしては挙げませんでしたが、比較的、日付の話をする時に「~から~まで」を使うように思います。
(例:3/31までに提出して下さい=3/31中に出せばセーフ)

もしも200を含むけれど100は含まない・・・式で言えば「WHERE user_id >100 AND user_id <=200」の時は、「100以上200以下」と書いてはいけません。「100より大きく、200以下」(または「100を超過、かつ200以下」)と記すべきです。
でも、これを「100以上」と書いてしまう人が少なからずいます。

大声では言えませんが、以前、コードに

なんて書いているものがあって「ええええどっちが正しいの!?」となった時があります。
(で、仕様を確認すると、コードが間違っているときもあって「まじか…」となることも……。わ、笑えない……)

逆にプログラムでは正しく表現できていても、コメントや仕様書で表現を間違えてしまっては、正しい仕様が伝わらなくなってしまいますね。十分に注意が必要です。

【section 3】「から」「まで」把握していますか?②

つい最近(今更~? と言われそうですが)TreasureDataに触れる機会がありました。
ある一定範囲の日付データを取得したい…という時、「TD_TIME_RANGEという関数を使う」と教わりました。

初級ハンズオン-TD関数-アクセスログ編より

このTD_TIME_RANGEの指定が「start_timeは含むけれど、end_timeは含まない」というものでした。つまり 「start_time <= targetRange < end_time」ですね。

もし2019年3月1日から3月10日までのデータが欲しい場合、start_timeに2019年3月1日、そしてend_timeに2019年3月11日を設定します。これで「3月10日のデータまで」を得ることができます。

このように関数を見ただけでは伝わらない仕様を、きちんと説明文を読んで理解しなければいけません。
・・・正直「終了時間」って書かれているだけだと、その値を含みそうに見えるんですけどね・・・含まないそうなんですよコレ・・・。

同じことが、私たちが書く(であろう)プログラムや設計書にも言えるでしょう。
「終点を含まない」が、その開発チーム(もしくはプロジェクト)の共通言語なら問題ないと思います。ですが「この処理は含むけど、こっちは除外」のように、ふわふわ揺れていると、うっかりミスを誘発しやすくなります。

【section 4】英語の「以上」「以下」は?

開発言語やライブラリ類の説明書きは英文なことも多いので、条件にまつわる書き方は覚えておいて損はないと思います。
最近は翻訳ソフトも優秀なので、違和感ない文章に訳してくれますが、コード部分など「そこは訳さなくていいのに!」という部分まで日本語化されたりして、結局原文を読むことに・・・なんて、実に「あるある」な話です。

ネイティブではないので、あくまで「辞書で調べた範囲」の話になりますが、section 1で書いた以上・以下・未満・超過は下記の様に表現されます。

〇〇以上=or more(and more)
〇〇以下=or less
〇〇より小さい(未満)=less than(under)
〇〇より大きい(超過)=more than

under XXXは分かり易いんじゃないでしょうか。映画やお酒、タバコの禁止文面でよく見ると思います。

ちなみに「~まで」を示すuntilはちょっと使い方がややこしいです。

「I’ll be away until Monday」

日本語に訳すと「月曜までいません」と書きたくなりますね。でもこれ、実は「日曜までいません(=月曜日はいます)」なのです。
・・・お前さっき、上の方で『「から」「まで」は、どちらも対象となる値を含みます 』って言ったじゃん!
いやこれホント混乱するんですが、そこが言語の差です。

untilは「特定の状況、活動が終わる時を示す」そうで、until 〇〇は、「〇〇な時が終わる時点を示す」のだそうです。

これを踏まえてもう一度。until Monday → Mondayには終わっている = 月曜日はいます

・・・・・・・ややこしいですね!!!
このように「until」が使われているときは、しっかりと前後の文章も含めて判断する必要があるでしょう。
(ちなみに、こういう場合は「I’ll be back on Monday」と書けば、月曜日に戻る=日曜までいません――となって、スッキリ勘違いの余地もなくなります)

【まとめ】

プログラマ間であれば「ツールや言語における暗黙の了解や、数式による表現」を、共通言語として持っていることができるでしょう。
ですが対クライアント・対エンドユーザでは、それを認識できていないことがあります。もしくは使った言語によって違いが出てしまうこともあります。

小さな勘違い、小さな齟齬が、大きなバグを産むことがあります。コードを書く時は勿論ですが、要件・仕様を定義する際も、この辺の配慮は常に持っておいた方が安全だと思われます。

表記ゆれやあいまいな表現を極力なくすように、言葉の選び方には気を付けたいですね。

About the author

Add Comment

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

By As

最近の投稿

アーカイブ

カテゴリー

タグクラウド

コーポレートサイト