ここまで作成したソースコードを使えば計算はできるのですが, 式を変更する毎にソースコードの編集, コンパイル, 実行と手順が多いので使い易くありません. そこで, コマンドライン引数から数式を与えられるようにします.
1)コマンドライン引数
process.argvを使えば, コマンドラインから引数を取得できます. index.tsに次のようなコードを記述して試してみます.
実行してみます.
PS C:\TSWork\RPN> .\node_modules\.bin\tsc
PS C:\TSWork\RPN> node .\dist\index.js 1 2 + 4 *
コマンドライン引数: C:\Program Files\nodejs\node.exe
コマンドライン引数: C:\TSWork\RPN\dist\index.js
コマンドライン引数: 1
コマンドライン引数: 2
コマンドライン引数: +
コマンドライン引数: 4
コマンドライン引数: *
PS C:\TSWork\RPN>
2)コマンドライン引数から式を取り出す
実行結果から, process.argvの3つ目以降の要素を配列として取り出せば, コマンドラインから数式を与えられます. つまり, process.argvの0番目と1番目の要素がジャマ, ということです. このような場合, sliceを使って配列をコピーします. index.tsファイルを次のように変更します.
実行してみます.
PS C:\TSWork\RPN> node .\dist\index.js 1 2 + 4 *コマンドライン引数: 1コマンドライン引数: 2コマンドライン引数: +コマンドライン引数: 4コマンドライン引数: *PS C:\TSWork\RPN>
この結果から, inputをそのままcalc関数に渡せば計算してくれます. 最終的なindex.tsファイルの内容は次のようになります.
実行してみます.
PS C:\TSWork\RPN> .\node_modules\.bin\tsc
PS C:\TSWork\RPN> node .\dist\index.js 1 2 + 4 *
計算結果 12
PS C:\TSWork\RPN> node .\dist\index.js 1 2 + 4 * 5 -
計算結果 7
PS C:\TSWork\RPN>
コマンドライン引数の内容に応じて計算することを確認できました.
3)まとめ
この記事では, コマンドライン引数に記述した式を計算するようにプログラムを修正しました. プログラムに式を与える方法として, ファイルからの読み込みも考えられます. しかし, TypeScriptというよりもNode.jsでのファイルの読み込みは, 非同期プログラミングが前提となり, 挫折しそうなポイントですので, 記事を改めてじっくりと考えたいと思います.
コマンドラインから式を与えられるようにしましたが, 誤った式を与えた場合, 例えば対応していない演算子や数値以外の文字列が与えられた時, エラーを返しません. 次回の記事では, 式として妥当かどうかをチェックする仕組みを入れます.
最後に, この記事で使用したNode.jsとTypeScriptのバージョンは次の通りです.
PS C:\TSWork\RPN> node --version
v14.17.5
PS C:\TSWork\RPN> .\node_modules\.bin\tsc --version
Version 4.3.5
PS C:\TSWork\RPN>
0 件のコメント:
コメントを投稿