1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CocoaAdvent Calendar 2015

Day 20

[Cocoa]安全なプログラミング?

Posted at

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 Advent Calendar 2015

【Cocoa練習帳】
http://www.bitz.co.jp/weblog/

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?