![見出し画像](https://assets.st-note.com/production/uploads/images/101982314/rectangle_large_type_2_c836667b353c03fdf33fc76bbd79a318.png?width=1200)
【Console Application】ファイルとデータベース 269【学習記】
今回の概略
NSNotFound とか言う unsigned なのに -1 っぽい振る舞いをする定数を見つけてそれを使う事にする等🤤
#学習記 #Objective_C
#NSNotFound #NSUInteger
【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 を NSNotFound 想定に
前回の粗筋
内包クラス作れなくて子に親の参照作ろうとすると前方参照が要るけどなんとか乗り切った🙄
DBAccessor
まず原本でも DBKey より前に宣言されてる DBKey から呼ばれる機能の移植から🤤
![](https://assets.st-note.com/img/1680538760639-cry8ZEa06v.jpg)
そして OC やってていっつも思うの🙄
_人人人人人_
> 関数名 <
> 長すぎ <
 ̄Y^Y^Y^Y^ ̄
ただ単に replace にすれば良いのに stringByReplacingOccurrencesOfString だよ?🙄
他のオブジェクトの関数も長くなりがちだけど流石にこれはなんか文字列関数の名前に恨みでも有るんだろうかと思わざるを得ない😞
まぁ、時代を考えたら意識高い系が考えたキラキラな関数名だなって感じしかしないけど🙄
![](https://assets.st-note.com/img/1680538790238-XWM2nqPdKH.jpg)
リフレクションで難儀を極める予定の rClass はまだしも getColumnNames は DBKey の宣言より後にあるじゃん!ってなった😞
Kotlin でもやったネタなので Swift でもネタで出るのは確定してるんだけど OC の場合はヘッダだけ先に書いておけば回避可能🤤
まぁ、判ってるエラーなので後回し😑
しかし indexOfObject の返値判定で気が付いたけどよくある index 返値系では負数を返してエラーとする事が多いのに OC は無符号整数のまま NSNotFound という定数を提供しているのよね🤔
エラーとして -1 を得る様に作ってるけど NSNotFound を利用する形に変えれば NSUInteger のままできるので幸せになれるのでは?🤤
![](https://assets.st-note.com/img/1680538842167-xJzLNzbOnK.jpg)
よしよし🤤
どこかの区切りで勘定系や索引系はこれに置き換えてこうかな🤔
NSNotFound
https://rusutikaa.github.io/docs/developer.apple.com/documentation/foundation/nsnotfound.html
OS X v10.5より前、NSNotFoundは0x7fffffffとして定義されました。32ビットシステムに対して、これは事実上NSIntegerMaxと同じでした。64ビット環境をサポートするため、NSNotFoundは現在NSIntegerMaxとして正式に定義されます。
NSUInteger でありながら `printf("%d",var);` などとすると -1 となるものの中身は unsigned なので NSIntegerMax だった、というお話🤤
つまり NSNotFound を使うように変更する場合、まず NSNotFound である事を確認する形にしなければならないという事🤔
まぁ、忘れなければ大丈夫だろうけどウチはどうもすぐこういうの忘れるからのぅ…😞
頑なに原本に忠実でもダメでは無いんだけど「その言語らしさ」での実装を学ぶのも目的なので今回は NSNotFound は採用するお🤤
そうじゃなかったら OC のめんどいメッセージ方式なんて書かないで全部 C++ で書くわ🙄
![](https://assets.st-note.com/img/1680538876701-SsJInCvEFa.jpg)
と言う事はこの DBKey で使ってる、割と最近追加した IntArray の無符号版が要るわけよね🤤
![](https://assets.st-note.com/img/1680539037772-0MF9mAtnOS.jpg)
まぁ、コピペして片っ端から符号なしにするだけなんだけど🤪
![](https://assets.st-note.com/img/1680539076327-UKhcKBZ0R4.jpg)
で、別のコンストラクタ呼ぶヤツ、 `[[DBKey alloc] init: key:]` にすべきか作法判らないんだけどとりあえず self で呼ぶ形にしてみてる🙄
エラー出ないからこっちの方が良さそうな感じするけど…ちゃんと動くのかねぃこれ🤔
次回は
DBKey の機能を移植してくぽ🤤