iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
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に慣れると、インタフェース部と実装部のファイルが分かれているのが、煩わしく感じてしまう気持ちも否定できないが。