予告通り今回はターミナル風簡易シェルをつくります!
シェルとは、コマンドを入力すると何かやってくれる
Windowsでいうコマンドプロンプトみたいなものです。
それをnScriptで作るんです!
ではサンプルをみてください。
///////////////////////////////////////
Function main() {
puts ("Hello Terminal!!");
while (1) {
puts ("\nterm~#");
com=gets(10);
switch (com) {
case "hello":
puts ("Hello!!");
break;
case "pwd":
puts (GetCurrentDirectory());
break;
case "exit":
case "end":
break 2;
default:
puts ("unknown command");
break;
}
}
}
///////////////////////////////////////
やっとソースらしいものになったというか...
感激ですねw
やっぱこうでなくちゃ...と物思いにふけってたら時間が
ないので進みますね...w
実行結果を見てもらって、感激してくれたでしょうか?
してくれなかったら、、知りません←
まあ、どうとも思わなくても当然です。
これは以前の対話プログラムと、ほとんど変りません。
文法が全然違うじゃないかって?
仕組みはおんなじですよ。これから解説していきます。
はい、ということでまず目につくと思われる...
switch,case,break,default....
関数?命令?
ややこしくてわけわかんないので文法としてこれらの
使い方を覚えてしまいましょう!
これはif文に代わって条件分岐をおこなうものです。
以下の構文を見てください。
/////////////////////////
switch (比較対象) {
case パターン1:
処理1;
break;
case パターン2:
case パターン3:
処理2;
break;
default:
処理3;
処理4;
break;
}
/////////////////////////
長かったのでもうスラッシュで囲っちゃいました。
構造はまったく違いますが、if文と同じ働きをします。
switchの引数に比較元の変数をいれ、case文で
パターンを準備します。else ifみたいなものです。
case パターンの後にくるのは:です!!
;ではありませんから気を付けてください。
caseの後にそのパターンと一致したときの処理を
書き、処理の最後にはcase構造から抜け出すために
break;をいれます。
そして最後にあるdefault文が、if文のelseです。
つまりどのcaseにも一致しなかった場合におこなう
処理をここに記述します。
これでswitch構造はわかりましたね?
では他にわからないところは...
おお、GetCurrentDirectory()について話をしてない...
これは...今は知らなくていいですw
とりあえず、普通にこれを実行すると、スクリプトが
置いてあるディレクトリを返し値として返します。
返し値わからない人はちゃんと前回文みてくださいね!
余談ですが
puts (GetCurrentDirectory());
って書き方ってすごくまとまってて
いい書き方だと思いませんか?
かっこいいですよねw
関数の返し値は何かの変数に代入したりするよりは
そのまま返し値を利用するのがいいと思うんです。
あと、case文ですが、パターンはcaseを並べることで
増やすことができます。
これとこれに一致したらこれを実行
という風にできますね。
その例がサンプルの16行目からの3行です。
で、ここの3行目で疑問に感じてほしいことがあります。
break 2;となっていますね。
実はbreakは、その後に数字を指定して実行することで
幾つの関数、構造から抜け出すかを指定できるのです。
この場合、2つの関数を抜け出すとmain()を抜けるため
終了するようになっています。
これで全部の解説は終了ですね。
分岐がめっちゃあるので、チャートっぽい解説はしません。
使ってればわかりますよ、ね?
まあ、仮にどうしてもわからなかったら、コメントにでもいいし
メールにでもいいので質問してくださいね。
わからないことはほうっておいちゃいけません。
一番ほうっておいてるのは筆者ですが←
今回の記事は、いろんな端末に転送しては書き、転送しては
書きを繰り返したので、解説しきれてないとこがあるかもしれ
ないです。
見つけたら、コメントに書き込んでください。
即座に対応いたします!!
次回からは、ターミナルの基礎をさらに完成に近づけていきます。
そのあとからはいろんなコマンドを増やしていきましょう。
基本的な関数、命令は今回で解説が終了となります。
これからは応用的な関数の説明に入っていくので、、
きちんと復習しておいてくださいw
2 コメント:
ありがとうございます
この更新速度には助けられてます!w
前回のこと...ではないかもしれませんが、getcharとifやらで取得させたa=1などの変数の定義(でいいのでしょうか?)
をmain関数に適用させようとすると、結局できずに0になってしまうのですが
どうすれば適用できるのでしょうか
説明下手ですみません...
あぁ、、なんとなく察します。。
そのことについて疑問に思ってくれることを楽しみにしていました←
次回、扱おうかなあああと思っていたものなので、試行錯誤しながらもう少々お待ちくださいw
コメントを投稿