- 思い付きのネタ(ほぼ、自分の勉強用)。
苦しくて、狂おしくて。
高校時代の三年弱を夜な夜なCでゲーム書いていた。
大学1年生で業務系のネットワークプリンターのパーサーを夜な夜な書いた後に
Cアレルギーになったのがはるか昔のこと。
書店で目にした書籍『苦しんで覚えるC言語』には、さらにいろいろと苦しい何物かが
詰め込まれているものと想像していた。
これからのクロスプラットフォーム開発環境として、《ほぼC言語》ながら、21世紀前半を代表するクライアント向けOSとなろうMac OS XとiOSを生み出す礎となったObjective-Cに改めて注目してみようと考えた自分も、Objective-Cに改めて苦しんでみようと思いたったもので、作者サイトの方にアクセスしてみた。
なんと、『苦しんで覚えるC言語』サイトは、ゆとり世代(死語?)にも安心してお勧めできそうな、まったく怖くない解説サイトではないか。
なるほど、そんな時代なのね。
ということで、苦しんで覚えるC言語、略してクルシイ(苦C)というらしい本サイトをリスペクトして、苦しんで覚えるObjective-C (略称、クルオシイ苦O-C?)のメモ書きを残しておこうとちょっと思った次第。
C言語の文法はすべてクルシイ側に任せ、
そこにはないbetter-C(or 変態C)なところだけを記していく予定。
実のところ、 C99に準拠したC言語のすべてのコードはObjective-Cのコンパイル(Clang)を通るので、Objective-Cの実行環境(X-code、visual studio等 )をC言語以外の学習教材として使う手はありだとおもう。
...以下はあくまでそうしたことを考え始めた自分向けメモ。いずれ、新人さん向けにリライトするかもしれない。
逆に、C++11/14/17は、
C++をガリガリ書くことになる研究室か企業に入るややレアな人にのみお勧めしたい。
※ C++はC言語の完全互換ではないため。
対象読者は、主にはマイマシンがMacな人。あとは、RAM 8GB以上を搭載しているwindows/linuxユーザーの人。docker環境等を用意した後には対象が広まるのだろう。
第一問 ブロックリテラル (あるいはクロージャ)
ということで、クリスマスイブにお送りする第一回は、Objective-Cのブロックリテラルのお題。
以下のファイル、
拡張子はobjective-c形式の.mである。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
int (^blockXY)(int x, int y) = ^(int x,int y){ return x+y; };
int a= 1;
int b= 4;
printf("%d + %d = %d by extended C...\n",a,b,blockXY(a,b));
return 0;
}
以下の問いに答えよ。
◇このコードで標準C言語と異なるところはどこか?
◇このコードの実行結果は?(Xcodeでの実行を推奨)
回答は次回に(たぶん年末年始)。
誰得?
ブロックリテラルというのは、言い換えると他言語のクロージャに概ね相当する。
javaを使っている方はじめ、実務でクロージャを扱わない方は多々いるものと考えられる... 日本国内の技術者/SIerの過半数がクロージャを日常的に使っていないのではないかと思われる。
こうした方々にとって、拡張C言語であるobjective-Cを学習言語として軽くかじっておくのありなのでは、と思っている。
その他思うところはおいおいと。