【Console Application】コマンドライン引数【学習記】

いわゆる argv の取り扱い🤤

Q.
スマホでコマンドライン引数なんて使わないのでは…?
A.
た、確かに🙄
でも Windows 11 で Android アプリ、macOS で iOS アプリ動かす時に役に立つかもよ?🤪

→ Kotlin は Java にコンパイルされるくせに配列の大きさは length ではなく size 🙄
OCObjective-C で文字列テンプレートは、やはり難しい様でフォーマッタの利用が限界😞
→ swift の arguments は ProcessInfo というオブジェクトから参照してくる

#Objective_C #Kotlin #swift
#arguments #argv #配列 #for
#学習記


それじゃ argvコマンドライン引数 やろうかな🤤

の前に

画像1

現状を保存セーブ🤤
作り直したので履歴が無いからやっとかないとね☺️
まだ今みたいにバージョン管理が行き届いてなかった頃はフォルダごと複製して履歴にしたりしてたんだけど楽になった…🤤


Kotlin の arguments

じゃ、開いてる kotlin から開始しようかな🤤

画像2

自動生成で最初から引数args:Array<String>が書かれてて配列の使い方探すだけ…簡単🤪
for の書き方が今風な感じで基本全部 in で済ませちゃうのかな。右辺が全部何かしらの値束collectionになる式になってるから🤔
文字列中に変数名を埋め込める文字列テンプレートが使えるのはイイゾー🤤
E4XCS6の準拠ESMCS では使えないから jsx 開発で毎回文字列結合がめんどくさい😞

画像3

挙動は java と一緒かな🙄ソリャソウカ
スクリプトネームは入って無いところが java 的🤤


Objective-C の arguments

画像4

所謂いわゆる C 言語なので伝統的な "int argc,char **argv" 🤔
こちらも自動生成で最初から書かれてる親切設計🤤
ぶっちゃけ古来の書式のままなので新鮮味ゼロ🤪

画像5

タイムスタンプうざ!🙄
readLine() のとこだけ急に😒スンッってなってる感じで滑稽草生える🤪


swift の arguments

Swift4で書く、引数を取るコマンドラインプログラム
https://qiita.com/sahara/items/07a796f9a018b5f51bca
let argv = ProcessInfo.processInfo.arguments

画像6

swift はなんか JavaScript っぽい感じで main 関数みたいなのが定義されてないので標準で波括弧スコープが有る物と比べてインデントがゼロなので変な感じしてたのよね🙄
で、いわゆる main 関数で駆動しているわけじゃないので CGIperl,php… みたく動作中環境変数みたいなものを参照する必要が有るみたい🤔
↑記事では for の書き方も出てるので拝借🤤
こちらswiftはなんか kotlin に比べよりラムダ式っぽい感じになってるのが印象的🤔
for を function か class みたいな形にしててより「文法的な予約語ではなくビルトインオブジェクト」って感じなのかな🤤

画像7

🙄🙄🙄フルパスだー!!

おっとー swift の arguments のスクリプト名はフルパスだわ🤪
もしかしたら ProcessInfo からはファイル名だけ、パスだけ、ってのが取れるのかもね🤤今はどうでもいいや
挙動としては C 互換にしてある感じが良く分かる☺️


おまけ

NSLog のタイムスタンプが鬱陶しすぎるので別の出力方法に変更😞

NSString stringWithFormatの引数の便利な指定
https://qiita.com/SatoTakeshiX/items/354fc7643a1c800ec5b9
NSLogとprintfでの文字列出力
https://oversleptabit.com/archives/1184

画像8

伝統的な printf() に御登場いただきました🤤
readLine() の時みたいにファイルハンドルを割り付けて fprintf() でやる方法も有るけど今回はタイムスタンプだけ消えてくれればいいので簡単な方の printf() で🤪

画像9

………なんか最後の出力に改行が余分に付いてる感じするんだけど…🙄
ま、いいや🤪


次回は

次に進む前にこの OC の printf をもっと短絡指定できるように改造しようかな🤤
そして外部関数化してライブラリが育つ🤪

いいなと思ったら応援しよう!