社員みんなの写真

C#からはいるObjective-C


マックシステム (2014.12.16 09:00) | メンバーの戯言|

こんにちは。
ITソリューション部の恩田です。

突然ですが、Objective-C はじめました。
(まだはじめたばかりです…)

そこで今回は、C#からはいるObjective-Cということで、
C#とObjective-Cの記述方法の違いについて、簡単にご紹介したいと思います。

 

1.クラスの定義

// C#// 親クラス
class SuperClass
{

}

// インターフェース
interface IMyInterface
{

}

// 継承クラス
class MyClass : SuperClass, IMyInterface
{

}

 

// Objective-C// 親クラス
@interface SuperClass {

}

@end

// C#でいうところのインターフェース
@protocol MyProtocol

@end

// 継承クラス(ヘッダー部)
@interface MyClass : SuperClass <MyProtocol>

@end

// 継承クラス(実装部)
@implementation MyClass

@end

初めて見たときは”@”が気持ち悪いかなと思っていたのですが、すぐに慣れました。

 

2.メソッド定義

// C#// クラスメソッド
public static void ClassMethod (string str)
{

}

// インスタンスメソッド
public void InstanceMethod (string str)
{

}

 

// Objective-C// クラスメソッド
+ (void)classMethod :(NSString* str) {

}

// インスタンスメソッド
– (void)instanceMethod :(NSString* str) {

}

初めて見たときは”+/-“とはなんぞやという感じで。
“+”がクラスメソッド、”-“がインスタンスメソッドです。

 

3.オブジェクト生成

// C#
var obj = new MyClass();

 

// Objective-C
MyClass *obj = [[MyClass alloc] init];

newと書きたくなりますが、そこはぐっと我慢します。

 

4.リテラルについて

// C#
string str = “Hello World!”;
int intVal = 1000000;
bool boolVal = true;

 

// Objective-C
NSString *str = @”Hello World!”;
NSNumber *intVal = @(100000);
BOOL boolVal = YES;

違いはポインタを表す”*”とbool値のYES/NOぐらいがちょっとした違いでしょうか。
※”NS”はOS X のベースとなっているNEXTSTEPの略らしいです。

 

最後に

どちらも、もともとC言語から派生した言語だけあってところどころ似ているので、
意外とすんなりはいれそうです。
ただ、.NET Frameworkに比べると標準のライブラリは不足しているので、
オープンソースのライブラリを使用したりする必要がありそうですね。

Objective-Cにラムダ式はないようですが、
Swiftではラムダ式をかけるみたいなので、ある程度覚えたらそちらもいつか挑戦できればと思っています。

 

ちなみに、いま参考にしている書籍は以下の2冊です。
どちらもとてもわかりやすくてお勧めですので、これからはじめてみようと思っている方はどうぞ。
MAC OS X COCOAプログラミング 第4版
詳解 Objective-C 2.0 第3版