記事一覧

プログラムのリファレンスマニュアルを読み解いてみる




目次


リファレンスマニュアルを読み解いてみる

ハロー、みなさん。エジソンです。

本日は、各種プログラム言語のリファレンスマニュアルの読み解き方について説明します。

PHPの文字列置換関数

例えば、PHPの文字列置換関数のシグニチャは、以下のようになっています。この情報から分かることには何があるでしょうか。

関数の引数は。省略できる引数はあるのか。戻り値には何が戻るのか?

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

DOSのCOPYコマンド

また、以下は、DOSのCOPYコマンドのヘルプになります。この説明から、実際に自分がやりたいことを照らし合わせて、COPYコマンドを実行することはできるでしょうか?

COPY /?
1 つまたは複数のファイルを別の場所にコピーします。

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B] 送り側 [/A | /B]
     [+ 送り側 [/A | /B] [+ ...]] [受け側 [/A | /B]]

  送り側    コピーするファイル (複数可) を指定します。
  /A        ASCII テキスト ファイルとして扱います。
  /B        バイナリ ファイルとして扱います。
  /D        受け側のファイルが暗号化が解除されて作成されるようにします。
  受け側    新しいファイルのディレクトリまたはファイル名 (複数可) を指定し
            ます。
  /V        新しいファイルが正しく書き込まれたか検査します。
  /N        MS-DOS 形式以外の名前のファイルをコピーするときに、利用可能な
            らば、短いファイル名を使用します。
  /Y        受け側の既存のファイルを上書きする前に確認のメッセージを表示し
            ません。
  /-Y       受け側の既存のファイルを上書きする前に確認のメッセージを表示し
            ます。
  /Z        ネットワーク ファイルを再起動可能モードでコピーします。
  /L        送り側がシンボリック リンクの場合は、送り側リンクが指し示す
            実際のファイルではなく、リンクをターゲットにコピーします。

環境変数 COPYCMD でスイッチ /Y が設定されている場合があります。
このスイッチは、コマンド ラインから /-Y が指定されると無効になります。既定
では、COPY コマンドがバッチ スクリプトから実行されていない場合、上書き確認
メッセージが表示されます。

複数のファイルを追加するときは、受け側に 1 個のファイルを指定し、送り側に
複数のファイルを指定します (ワイルドカードを使うか、ファイル 1 + ファイル 2 +
ファイル 3 と指定します)。

MySQLのCREATE TABLE

また、以下は、MySQLのCREATE TABLEです。ここから、読み解くことができる情報はあるでしょうか。

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

(長いので省略)

各々の説明文は、すべて公式サイトから引用しています。それぞれは、別の言語になりますが、実はリファレンスマニュアルの記法には大差がありません。

言語リファレンスマニュアル記法

さて、本題に入りましょう。

とりあえず、記法の種類を列挙してみました。以下を覚えていれば、様々な言語リファレンスに対応できることでしょう。

表記 使用目的

| (縦棒)

角かっこ、または中かっこで囲まれた構文項目を区切ります。使用できる項目は 1 つだけです。

[ ] (角かっこ)

省略可能な構文項目を示します。

{} (中かっこ)

必須の構文項目を示します。

[... ]

先行する項目を繰り返せることを示します。

<label> ::=

構文のブロックの名前を示します。この表記規則は、1 つのステートメント内の複数の箇所で使用できる長い構文の一部、または構文の 1 単位について、グループ化してラベルを付ける際に使用します。構文のブロックを使用できる箇所は、不等号で囲まれたラベル (<label>) で示します。


[読んでみよう] - PHPのstr_replace

以下の、str_replaceを読み解いてみましょう。

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

str_replaceには戻り値があります。戻り値は、mixedです。mixedというのは、PHPに特有の書き方の一つで、複数のデータ型に対応しているという意味で使われます。実際に、何と何の型に対応しているかは関数によって異なるので、リファレンスを読む必要があります。

そして、引数には、第一引数 $search / 第二引数 $replace / 第三引数 $subject を指定します。mixedなので複数のデータ型に対応しているということですね。

そして、最後の引数の $count は省略することも可能です。ここが重要なポイントですね!

何故、第三引数が省略できるのかと言うと、[] 角かっこ があるからです。

[, int &$count ] と書くことで、角かっこ内部の ”, int &$count”(カンマ部分も含めての) 部分を省略できるのです。

[読んでみよう] - DOSのCOPYコマンド

DOSのCOPYコマンドについて、読み解いてみましょう。

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B] 送り側 [/A | /B]
     [+ 送り側 [/A | /B] [+ ...]] [受け側 [/A | /B]]

はじめに注目すべき箇所は、[] 角かっこ が良いかと思います。角かっこは、省略を意味するので、省略した形で整形してみると以下のようになりました。

COPY 送り側

かなり、シンプルになりましたね。ただ、コピーなのにコピー先である受け側がないのが気になります。このように、COPYコマンドを上記のように書くことで、「コピー元のファイルが複数ある場合は、最初のファイルにすべて連結される」という特殊な実行になるようです。

COPY 送り側 受け側

大抵は、上記のように、送り側=コピーするファイル名、受け側=コピー先のファイル名、といった形式が一般的ですね。

このように、一見記号ばかりで難しいと思われがちなリファレンスマニュアルですが、角かっこ部分をとりあえず除外して考えることで、理解を深めることができるようになります。

応用部分として、コピーするファイルを複数回指定することも可能です。以下の表記がそうなります。

[+ 送り側 [/A | /B] [+ ...]]

上記は、送り側であるコピーファイルを複数指定できるという意味になります。 ”...” が登場したら、繰り返しという風に覚えておくと良いかもしれません。

ちなみに、送り側が複数ある場合の指定は以下のようになります。

COPY a.txt+b.txt+c.txt d.txt (a, b, cのファイル内容を結合してd.txtとしてコピーする)

[読んでみよう] - MySQLのCREATE TABLE

CREATE TABLEについては、長大で且つ難解ですので説明を省きます。一つ参考までに説明すると、

<label> ::=

という表記が頻繁に登場します。これは、label部分が別に書かれており、そちらを参照するようにという意味になります。長大な構文ほど、label表記が良く使われるので、覚えておくと良いかと思います。

興味のある人は、最後にリンクをまとめておくので、そちらを参照すると良いかと思います。

CREATE TABLEはかなり長い構文なので、読み解くのに苦労しますが、他のサイトに掲載されているサンプルと比較して確認してみると、徐々に理解が深まっていくかと思います。

まとめ

こういった、リファレンス記法をバッカス・ナウア記法(BNF)と呼びます。

リファレンスによって、独自の拡張がなされていることがあります。そんな場合には、マニュアルの序文に添付されている構文規則の章を読むと良いかと思います。

参考
Wikipedia - バッカス・ナウア記法
PHP - str_replace
MSDN - コマンドライン リファレンス
MSDN - COPYコマンド
MySQL - 表記規則および構文規則
MySQL - CREATE TABLE 構文


関連記事

このエントリーをはてなブックマークに追加

コメント

コメントの投稿

非公開コメント

プロフィール

EZOLABブログへようこそ。
EZOLABは、札幌のソフトウェア会社です。

http://ezolab.co.jp