SPIDERPLUS Tech Blog

建設SaaS「スパイダープラス」のエンジニアとデザイナーのブログ

突然ですが問題です!Objective-Cの問題、あなたは解けますか?

皆様こんにちは。
秋も深まり、紅葉がきれいな季節がやってきました。

スパイダープラスでは、日々エンジニアたちが技術を研鑽しながら業務に取り組んでいます。

今回は、そんな弊社エンジニアたちのSlack上での会話をブログとしてお届けします。

この記事を通して、スパイダープラスの雰囲気を感じ取っていただけるよう、できるだけSlackの会話をそのままお伝えしたいと思います。
ほぼブログとは言えない形式かもしれませんが、初めての試みですので、楽しんでいただければ幸いです。

なお、この会話はY・Kさんからのクイズが会話の起点になっています。

皆さんも解けるかどうか、ぜひチャレンジしてみてください。

 

ー 以下Slackのやり取り ー

❓ ❓ ❓ ❓ ❓
Objective-Cコンパイルエラーとなるのは a ~ g のうちどれでしょう❓

    BOOL a = 1;
    BOOL b = true;
    BOOL c = 3;
    BOOL d = @"obj-c";
    BOOL e = nil;
    BOOL f = 'a';
    BOOL g = 3f;

ひっかけなら、b❗

惜しい❗ひっかけだけどひっかけどころが違う😂

他のやつは、truthyかfalsyに落ちるけど、trueはTRUEが正解かなとか考えてました。残念。

eとfかなと思いました。

残念、不正解です。
@"abc"なら文字列、'a'ならchar型です。

char って実は文字型ってよりかは
int = 4bytes
short = 2bytes
char = 1byte
という感じで箱の大きさが違うだけなんです。

'a'はcharだからintに入るのでこいつは違うと思ってました❓

'a'は無理くりintに入るで当たってます 👍

objcではすべての型でnilが持てたイメージがなく、intやBOOLは必ず値を入れないといけなかったなぁという記憶です🙇

わかりました。;の後ろにスペース入ってるw

nil は参照がない時のアドレスなので一応アドレスと考えていいと思います。
アドレスは int 型で表せるので実は大丈夫です。

同じ理由から文字列型 @"obj-c" はアドレス番地を返すので大丈夫です。
スペースは一応入ってても大丈夫かと💦気づかなかった😂

ひっかけと考えると変数名にe が使えないとか

あ、その手のひっかけ問題は今度やりたいですね。
予約語をどこまでキワキワで使えるか😂

そうなるとどれが正解ですか?

正解を発表します🎊

a ~ f って一応は整数値系なのでint型に突っ込めるんですよね。
だから唯一の浮動小数点であるfが答え❗て思うじゃないですか。

objective-cだとintに突っ込むと 3.3fでも 3 になりますが突っ込めます。
突っ込めますが、3f という表記は間違いで、 3.0f もしくは 3.fと表記する必要があります❗

3.0f だったら整数じゃないから int に入らないと見せかけて実は入るんだけど、よく見ると構文エラーという罠でした。

マジですか。
何かの言語で、小数にしたいからよく 3f って書いてましたけど、そこなんですね。

そうなんです!
0.f .0f 0.0fは全部 0です。

でも 0f や .fはダメです。

皆様お疲れさまでした❗

お疲れさまでした❗

ー ここまで ー

いかがでしょうか?

今回はObjective-Cについて取り上げました。

開発現場でのメインはSwiftで、リプレイスが進む中でSlack上で一躍盛んになったやりとりからクイズ形式にして投稿してみました。

3fはリテラルとして正しくありません。
正しくは3.0f もしくは 3.fという表記にする必要があるそうです。
そのため、答えはgになります!

コンパイルしたときのエラーではなく表記方法によるエラーというひっかけ問題ですね。

皆さんは正解できましたか?
スパイダープラスではSlack上でこうした会話がされており、楽しく技術に対して知見を深めております。
興味のある方はぜひスパイダープラスに遊びに来てください!