見出し画像

【Console Application】ファイルとデータベース 278【学習記】

今回の概略

可変長引数は個数を調べる方法が無い事が判明🙄
個数を渡す、 NS_REQUIRES_NIL_TERMINATION を指定し nil (null) で終わるリストで渡す、( printf みたいに)書式を渡してシレっとそこで数える、の何れか😞
但し引数の対象が全てオブジェクトの場合は nil になるまで繰り返す、という書式でも一応通るっぽい ( NS_REQUIRES_NIL_TERMINATION 無しだと危険なので良くない)🙄

#学習記 #Objective_C
#可変長引数

【Console Application】ファイルとデータベース【学習記】
仕様
https://note.com/sayka/n/nb8a67fa90a64?magazine_key=m7bb64c6a359f#br1mB

仕様
レコード
・レベル
 1-12
・難易度
 b,n,h,a,l
・曲名
・ランプ
 -,x,a,e,c,h,e,f

オプションスイッチ
-u file.csv # 更新(略値)
 ファイル名だけ指定した場合更新処理と見做す
-d file.csv # 削除
-p # csv 出力(略値)
 何も指定せずに起動した場合出力処理と見做す
-v # バージョン
-h # ヘルプ

----備忘録
count,index を NSNotFoundNSUInteger 想定に


前回の粗筋

ダンプ系は平和だった…いつもこうなら良いのに…🤤


updateDBValueWithColumn

可変長引数のある機能にとりかかるぽ😑
実は DBKey 初期化の時も原本では可変長引数だったんだけど内部で配列処理していた事もあって OCObjective-C 版では配列だけ受け取る形にしてあるのよね🙄
でも今回のは更新したい列番号を列挙するので配列じゃない受け取りの方が使い勝手は高くなるのよゑ😑
DBKey も確かにそうなんだけど副キーの列挙だから配列化してからでもダメじゃないと思うけど DB の更新はどこが対象になるかも毎回変わるのでちゃんと両方用意しないとならないかな🙄

Objective-Cの可変長引数
http://eienlearner.seesaa.net/article/258767625.html
Objective-Cのメソッド中でも可変長引数を使うことは可能。ただしC言語のstdargを使うので基本的な内容は同じ。

以前 print を組んだ時とほぼ同じっぽい🤤

【Console Application】外部関数 32【学習記】
https://note.com/sayka/n/n5be53b96ad38

以前のこの記事では違う可変長引数の記事を参照してるぽ🤔
この時は stringWithFormat の arguments にそのまま配列渡して終了になってるっぽいけど今回は真面目に記事読んで書かないとならないっぽい🙄

………
やたら NS_REQUIRES_NIL_TERMINATION を使わせようとする記事が出てきてて「そうじゃない😩」ってなってたけどこの学習記の参照記事のも同じで「コレジャナイ😞」ってなってる件に関して…🙄
これはもしかして資料を探すだけで終わる系…?😑

あ、でも学習記を見る前に見つけた記事の方は NS_REQUIRES_NIL_TERMINATION の話は後で出てくるから序盤の解決法を見てやればイケる…?🤔

関数定義的にはとりあえずエラー無し…🤔

プリミティブは id に入れられない問題再び🙄
C 言語では可変長引数が数値の場合どうしているのか、というのを調べないとならない😑

そもそも可変長引数とか個人でそう使うものでもないから知らんのんよぉ😭

………
sizeof で測る…?何を? args を?🤔
ポインタ取得で nullptr まで頑張る…?🙄

【C言語】可変長引数を受け取る関数の作り方【stdarg.h(va_list/va_start/va_arg/va_end)】
https://marycore.jp/prog/c-lang/variable-argument/

可変長引数の個数を取得することは出来ません。そのため、関数側には何らかの形で引数の個数を知らせる必要があります。

なーんだ、無理ジャン?😞
言われてみれば printf や stringWithFormat は書式からシレっと個数を取得する代物なのよね🤔うまく考えられてる

て事は配列で渡しても構わないぬ🤪
NSUInteger 用の独自配列は作ってあるからそれを受け子にするぽ🤤

気が付いた😑
同じ throw を複数回書くくらいなら NSException の変数を1つ作ってそれを投げるだけにすれば良い事に🤪

可変長引数を諦めたら比較的平和に完了🤤


次回は

引き続き DB 出力系🤤
可変長引数は今回と同じ扱いで行くぽ😑

この記事が気に入ったらサポートをしてみませんか?