Object-C基礎の基礎2(クラスを作る1)
クラスを作る時はAS3と違って
interface(インターフェース)と
implementation(実装)
の二つにわけてクラスをつくります
先につくるクラスの名前、関数名
変数とかを宣言しておいて
後でその中身を作るカンジですね
これでまず宣言
@interface~@endがインターフェース
関数の宣言はAS3では
『属性値 関数名(引数:引数型, ...) : 戻り値型 {...} 』
だったので並びがかなりごっちゃに感じます
関数の頭に-や+がついてますが
これがAS3でいうところのstaticなのか
そうでないのかを表してます
-がstaticで+がそうでないやつです
(Object-Cのそれはちょっと他とは
違うらしいのですがそれはまた先の話)
プロパティについてですが
Object-Cには実質AS3みたいな
public varみたいなもんがありません
基本的には全部メンバ変数で
(myObj.myVarみたいにドットで区切ってアクセスできない
[ ]くくりでオブジェクトに『~してください』って
メッセージ送らないと触る事ができないようになってる)
@propertyでプロパティのようなものを作る場合も
全部getter,setterで実装されて、メンバ変数の値を利用する形になり
AS3視点で見れば実質パブリックプロパティ(public var)なんてものは
存在しないようなカンジです
プロパティについては詳しくは次の実装部のパートでやります
interface(インターフェース)と
implementation(実装)
の二つにわけてクラスをつくります
先につくるクラスの名前、関数名
変数とかを宣言しておいて
後でその中身を作るカンジですね
@interface クラス名 : 継承元クラス{
型 メンバ変数名;
....
}
@property (プロパティ属性...) 型 インスタンス変数名;
....
-(戻り値型)クラス関数名 : (引数型)引数名;
....
+(戻り値型)オブジェクト関数名 : (引数型)引数名;
....
@end
これでまず宣言
@interface~@endがインターフェース
関数の宣言はAS3では
『属性値 関数名(引数:引数型, ...) : 戻り値型 {...} 』
だったので並びがかなりごっちゃに感じます
関数の頭に-や+がついてますが
これがAS3でいうところのstaticなのか
そうでないのかを表してます
-がstaticで+がそうでないやつです
(Object-Cのそれはちょっと他とは
違うらしいのですがそれはまた先の話)
プロパティについてですが
Object-Cには実質AS3みたいな
public varみたいなもんがありません
基本的には全部メンバ変数で
(myObj.myVarみたいにドットで区切ってアクセスできない
[ ]くくりでオブジェクトに『~してください』って
メッセージ送らないと触る事ができないようになってる)
@propertyでプロパティのようなものを作る場合も
全部getter,setterで実装されて、メンバ変数の値を利用する形になり
AS3視点で見れば実質パブリックプロパティ(public var)なんてものは
存在しないようなカンジです
プロパティについては詳しくは次の実装部のパートでやります
Object-C基礎の基礎1(オブジェクトの操作)
ここからAppleのチュートリアルとか
リファレンスとか見ながらになります
AS3からの視点で自分なりに
噛み砕いて書いていきます
あれですよ
小学校の学習方法で
『先生から教わるだけじゃなく
誰かに教える事もすることで
よく身に付くようになる』
ってヤツです
リアルタイムで学習中のこと語るので
正確性はぜんぜん保障できません
良心ある方はぜひ間違ってたら
ツッコミ入れてください
まず、AS3から見て
『変わってるなぁ』と思った構文
他のオブジェクトに何かさせるときは
[ ]でくくって
[インスタンス 関数名:引数1,引数2.... 識別子:引数1,引数2....]
[インスタンス set変数名1:要素1値:要素2値...,変数名 変数名2:要素1値:要素2値...]
みたいなかんじにやります
みたいなカンジですね
これは変わってるなぁと思うと同時に
逆にそういえばAS3はオブジェクト指向な割に
他のオブジェクトをいじるのと
自分をいじるのにあんまり段差がないな
とも思ってしまいました
『自分の事は自分でする』のが基本のオブジェクト指向では
他のオブジェクトをいじるのところは
それなり段差があるのがむしろ自然
AS3の方がゆるすぎなのかな…
リファレンスとか見ながらになります
AS3からの視点で自分なりに
噛み砕いて書いていきます
あれですよ
小学校の学習方法で
『先生から教わるだけじゃなく
誰かに教える事もすることで
よく身に付くようになる』
ってヤツです
リアルタイムで学習中のこと語るので
正確性はぜんぜん保障できません
良心ある方はぜひ間違ってたら
ツッコミ入れてください
まず、AS3から見て
『変わってるなぁ』と思った構文
他のオブジェクトに何かさせるときは
[ ]でくくって
[インスタンス 関数名:引数1,引数2.... 識別子:引数1,引数2....]
[インスタンス set変数名1:要素1値:要素2値...,変数名 変数名2:要素1値:要素2値...]
みたいなかんじにやります
[myObj MyFunc:100,100]
[myObj setMyVar:100:100]
みたいなカンジですね
これは変わってるなぁと思うと同時に
逆にそういえばAS3はオブジェクト指向な割に
他のオブジェクトをいじるのと
自分をいじるのにあんまり段差がないな
とも思ってしまいました
『自分の事は自分でする』のが基本のオブジェクト指向では
他のオブジェクトをいじるのところは
それなり段差があるのがむしろ自然
AS3の方がゆるすぎなのかな…
Object-Cの前にCの基礎の基礎2
変数宣言する時は
型 変数名=値
ってカンジです
AS3だと
var 変数名:型=値
ってカンジのとこですね
AS3から見るとCのデータ型はデータベースのそれに近くて
『どの位メモリの領域つかうのか?』
ってことをちゃんと教えてくれっていってきます
(前回省きましたけどdoubleとかlong intとかshort intとかちゃんとあります)
配列を作る場合でも『何のデータ型の配列で要素数はいくつなの?』
ってちゃんと言ってあげなきゃいけません
int型3個の配列なら
みたいなカンジですね
あとString型っていうのは文字列って言うごとく
まさしく『char型の配列』で
これも要素数を求めてくるわけなんですが
文字列には『ここで文字列終了』っていう宣言が必要で
半角英数の場合でも文字数+1
全角日本語の場合は半角英数の2倍メモリ使うので
文字数×2+1の要素数が必要になります
みたいなカンジですね
まあでもここまで言っといてなんですが
Object-C使うにあたっては
このへんのは多分使いません
なぜなら配列も文字列も
Object-Cの一番基礎のクラスの
NSObjectクラスの拡張クラスである
NSArrayやNSStringを使う事になるからです
Appleも『Object-C使うんならNSObject基本にしたクラスでやりなよ?
でないとどうなっても知らないよ?』って言ってるので
おとなしく従いましょう、Cさんこれにてさようなら
型 変数名=値
ってカンジです
AS3だと
var 変数名:型=値
ってカンジのとこですね
int a=3
unsigned int b=3
float c=3.0
char d="A"
AS3から見るとCのデータ型はデータベースのそれに近くて
『どの位メモリの領域つかうのか?』
ってことをちゃんと教えてくれっていってきます
(前回省きましたけどdoubleとかlong intとかshort intとかちゃんとあります)
配列を作る場合でも『何のデータ型の配列で要素数はいくつなの?』
ってちゃんと言ってあげなきゃいけません
int型3個の配列なら
int[3]={1,2,3}
みたいなカンジですね
あとString型っていうのは文字列って言うごとく
まさしく『char型の配列』で
これも要素数を求めてくるわけなんですが
文字列には『ここで文字列終了』っていう宣言が必要で
半角英数の場合でも文字数+1
全角日本語の場合は半角英数の2倍メモリ使うので
文字数×2+1の要素数が必要になります
string[4]="ABC"
string[7]="あいう"
みたいなカンジですね
まあでもここまで言っといてなんですが
Object-C使うにあたっては
このへんのは多分使いません
なぜなら配列も文字列も
Object-Cの一番基礎のクラスの
NSObjectクラスの拡張クラスである
NSArrayやNSStringを使う事になるからです
Appleも『Object-C使うんならNSObject基本にしたクラスでやりなよ?
でないとどうなっても知らないよ?』って言ってるので
おとなしく従いましょう、Cさんこれにてさようなら