【Dart】main(List<String> arguments){}を動かしてみる
概要
サンプルコードでmain()に以下のように引数が入っているもの
main(List<String> arguments)
があり、main()で引数を渡して実行する方法がわからなかったので調べたことを記事にしました。
分かりづらい点や、誤り等ございましたら、ご指摘いただけるとありがたいです。
( にご連絡ください。)
この記事がどなたかの参考になれば幸いです。
Here’s an example of the main() function for a command-line app that takes arguments:
引数を取るコマンドラインアプリのmain()関数の例です。
// Run the app like this: dart args.dart 1 test
void main(List<String> arguments) {
print(arguments);
assert(arguments.length == 2);
assert(int.parse(arguments[0]) == 1);
assert(arguments[1] == 'test');
}
実行環境
macOS 12.3.1
Dart SDK version: 2.16.0 (stable)
zsh 5.8
解説のようなもの
どうもcommand-line appとしてmain(List<String> arguments)を実行すれば、mainの引数に
値を渡して実行できるようです。
※command-line appとassertについてはこの後にまとめてあります。
実行の仕方はコメントで記載されているように、main()が書いてあるファイルと、List<String>に入れる要素をスペース空けて並べてterminalで記述すれば、実行できます。
コメントに書いてあるコマンドの仕組みは以下のようになります。
dart [実行ファイルのpath] [List<String>に入れる要素1] [List<String>に入れる要素2]...
このコマンドをterminalで実行すれば、
各要素がList<String>に順番に入れられて、main()の引数になり実行されます。
ただし、サンプルコードにはassert文が書いてありますが、コメントの通りterminalでdart
で実行しても、assertは実行されません。
assertを動かすには
dart run --enable-asserts args.dart 1 test
のように
dart run
でオプション --enable-asserts
をつけて実行する必要があります。
command-line appとは
terminalとかのコマンドラインから直接ファイルを実行し、コマンドライン上で動作するアプリのようです。
ちょっと用語が違いますが、
コンソールアプリケーションとは、逐次的な文字メッセージの出力により現在の状態や処理結果を伝達するアプリケーションソフトのこと。OSなどのコマンドラインインターフェース(CLI)で実行される。
コンソールアプリケーション(コンソールプログラム)とは - IT用語辞典 e-Words
Dartの他の言語でもあり、呼び方はCliツールとかコンソールアプリとか様々なようです。
Dartではcommand-line appと呼んでいるようです。
assertについて
()内の条件を満たしているかassertでチェックします。()内の条件を満たしていないとUnhandled Exceptionを出して、実行はそこでストップします。
構文
assert(condition, optionalMessage);
- condition(条件)を満たしていないと次の行へ進まない。
満たされないとUnhandled Exceptionを吐き出す。 -
optionalMessage
はUnhandled Exceptionの時に表示されるメッセージになる。 - assertはFlutterのdebugモードのみ有効。runだと無視される。
- dart runみたいなコマンドでプログラム実行するときは、コマンドラインフラグ --enable-asserts つける必要がある。
// sample
dart run --enable-asserts lib/test.dart
動かしてみる
実際に冒頭のサンプルコードを動かしてみます。
assertされてるかわかるように、各assert文の後にprintを入れます
void main(List<String> arguments) {
print(arguments);
assert(arguments.length == 2, 'list length is not 2!');
print('first assertion');
assert(int.parse(arguments[0]) == 1);
print('second assertion');
assert(arguments[1] == 'test');
print('third assertion');
}
terminalで全てのassertを通過するように以下のように実行してみます。
% dart run --enable-asserts lib/samples/args.dart 1 test
実行結果
[1, test]
first assertion
second assertion
third assertion
全てassertが実行されているのがわかります。
次はassertに引っかかるように書いて実行してみます。
% dart run --enable-asserts lib/samples/args.dart 1 test test2
実行結果
[1, test, test2]
Unhandled exception:
'package:youtube_data_sample/samples/args.dart': Failed assertion: line 8 pos 10: 'arguments.length == 2': list length is not 2!
このような感じでUnhandled exceptionが表示され、
assert文で記述していたoptinalMessageも表示されているのがわかります。
最後に
ここまで読んでいただきありがとうございました!
参考サイト
main()について
command-line appについて
assertについて
Author And Source
この問題について(【Dart】main(List<String> arguments){}を動かしてみる), 我々は、より多くの情報をここで見つけました https://zenn.dev/ryouhei_furugen/articles/273cb1016cb79d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol