ようやく少しずつ Objective-Cが分かってきました

新しい言語を使えるようになるのは これまでと全く違う世界が目の前に広がり、とても楽しくもかつ辛いものです。今回、年末よりObjective-Cという独特の世界観を持つ言語にとりかかりました。合計5冊の書籍を読みあさり、それと共に Internetで、各種の解説ページを読み、またPDFとして確保しました。

Objective-Cはいわずと知れた Mac OSXで使われている開発言語です。当初はとてもマイナーな言語でしたが、iiPhone/iPadの爆発的ブームと共に、主要言語の一つとなりつつあります。共に C言語をルーツに持つ Objective-Cと C++ですが、その両者はとんでもなく違うアプローチにより いわゆるオブジェクト指向言語を実現しました。まだこんなふうに評論的に述べられる立場ではないと思いますが、敢えて言わせてもらえば、C++は徹底的にコンパイラの道を歩み、その優位性は開発されたアプリケーションが有する圧倒的なスピードにあります。

一方 Objective-Cはどちらかと言えばインタプリタの道に近づき、その優位性は、実行時の圧倒的な柔軟性にありますが、スピートという点では C++には相当劣ります。

しかしながら、現在の hardware/CPUの進捗の前では 言語がもたらすスピードが重要な局面というのはものすごく限定されてきました。むしろ、いかにユーザーに応じて実行時に柔軟に変化できるか? そのようなアプリを用意に開発できるか? それが重要になってきたのです。それと共に、Objective-Cが脚光を浴びつつあるのです。

まあ、そんな御託を並べるよりも、要するに僕としては、MacBook Proの上で走るかっこいいアプリを、できるならば iPhoneで動く簡単なアプリを作れるようになりたいから、そして新しい世界を見て、そこに入れる自分がまだいるか、自分の脳味噌が未だ新しい物を受け入れるぐらいに柔軟であるか否か、それを検証するため、そんな目的で Objective-Cの勉強を始めたのです

最初は茨の道でした、だって もう端から概念が違うのです 「なになに メッセージ?」 そんなのmethodではないの? ここから始まります

ようやく、以前に C++で書いた自転車乗りを Objective-Cで書くことができました それは以下のようなものです

まずは宣言ファイルである、Cyclist.hとそれを継承する GrowingCyclist.hです

// Cyclist.h
#import 

@interface Cyclist : NSObject

@property (copy) NSString* name;
@property (assign) float power;

-(id) init;
-(id) initWithName:(NSString*)name:(float)power;
-(NSString*) run:(float) slope;
-(NSString*) description;

@end

そして GrowingCyclist.h

// GrowingCyclist.h
#import "Cyclist.h"


@interface GrowingCyclist : Cyclist

-(NSString*) description;

@end

そして、それぞれの定義ファイルである Cyclist.mをまずは

// Cyclist.m
#import "Cyclist.h"


@interface GrowingCyclist : Cyclist

-(NSString*) description;

@end

そして次は GrowingCyclist.mという定義ファイル

// GrowingCyclist.m
#import "GrowingCyclist.h"


@implementation GrowingCyclist:Cyclist

-(NSString*) description{
    NSString* _temp=[[NSString alloc]
                     initWithFormat:@"%@, 力はgowingで初期値%f", [self name], self.power];
    return _temp;
}

@end

そしてプログラム本体は以下のmain.mファイルです

// main.m

#import <Foundation/Foundation.h>
#import "Cyclist.h"
#import "GrowingCyclist.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        // insert code here...
        Cyclist* cyclist1=[[Cyclist alloc] initWithName:@"齋藤 滋":5.0];
        NSLog(@"名前は %@", cyclist1.name);
        NSLog(@"%@",[cyclist1 run:6.0]);

        GrowingCyclist* cyclist2=[[GrowingCyclist alloc] initWithName:@"growing齋藤 滋":10.0];
        NSLog(@"名前は %@", cyclist2.name);
        NSLog(@"%@", [cyclist2 run:6.0]);
        
    }
    return 0;
}

これで出力は以下の通り

2013-01-05 14:40:53.590 cycling[18188:303] 名前は 齋藤 滋
2013-01-05 14:40:53.593 cycling[18188:303] 齋藤 滋は登れません
2013-01-05 14:40:53.593 cycling[18188:303] 名前は growing齋藤 滋
2013-01-05 14:40:53.594 cycling[18188:303] growing齋藤 滋は登れます

もっとも今回はだんだんとslope角度を変化させたり、繰り返し練習させていませんので、最初登れなかったcyclistが次第に登れるようになることを simulateしてはいませんが、既に本質的な部分は理解できたのです。

投稿者: (KAMAKURA & SAPPORO)Dr_Radialist

Expert Interventional Cardiologist and Amateur Computer Programmer

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です