トップ «前の日記(2015-12-19) 最新 次の日記(2015-12-22)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|

2015-12-20 [Cocoa]安全なプログラミング?

Swiftは安全なプログラミングを提供!という話を聞くと少しモヤモヤしてます。なので、この手の話題に関わりたくないので、ちょっと、違う視点から。

Swiftでもpublicやprivateが指定できるようになりがっかりした側なのだが、そもそも、それで何をしたいのか?隠すためだというが、Swiftのようなインタフェース部と実装部が分かれていない言語では、丸見えじゃん!と思ってしまう。

class Person {
    private var name = "名無しの権兵衛"
    
    func rename(newName: String) {
        name = newName;
    }
    
    private func secretWork() {
    }
}

では、C++はいいのかというと、privateなメンバーも、通常ヘッダーに記述するクラス定義で宣言しないといけないため、知りたくもない内部実装を見せられて、これもイマイチ。

 class Person {
    std::string name;
    void secretWork();
    
public:
    void rename(std::string newName);
};
void Person::secretWork()
{
}
 
void Person::rename(std::string newName)
{
    name = newName;
}

それを考えると、Objective-C 2.0は自分にとって理想的だ。

@interface Person : NSObject {
    NSString *name;
}
 
- (void)rename:(NSString *)newName;
@interface Person ()
- (void)secretWork;
@end
 
@implementation
- (void)rename:(NSString *)newName
{
    if (name) [name autorelease];
    name = [newName retain];
}
 
- (void)secretWork
{
}
@end

ヘッダーには見せたいことだけが記述されている。素晴らしい。

ただ、Swiftに慣れると、インタフェース部と実装部のファイルが分かれているのが、煩わしく感じてしまう気持ちも否定できないが。

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)

トップ «前の日記(2015-12-19) 最新 次の日記(2015-12-22)» 編集