рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ?
рджреЛ рддрдереНрдпред рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХрдИ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдмрдврд╝ рд░рд╣реА рд╣реИред рдирд┐рд╖реНрдХрд░реНрд╖: рдПрдХ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реАрдЦрдиреЗ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛ рдХреЗ рдореМрдЬреВрджрд╛ рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рд╕реА рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдпрд╛, рдкрд┐рдЫрд▓реЗ 15 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦрдирд╛, рдХрднреА-рдХрднреА рд╕реА ++, рдкрд╛рдпрдерди, рдкрд░реНрд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛, рд╕реНрдХрд╛рд▓рд╛ рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╕реЗ рджреЗрдЦрдирд╛ред рдФрд░ рдЕрдм рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реАред
рдкреНрд░рддреНрдпреЗрдХ рдпрд╛рддреНрд░рд╛ рд╕реЗ, рдЖрдорддреМрд░ рдкрд░ "рд╣рдо" рдФрд░ "рдЙрдиреНрд╣реЗрдВ" рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ рдордиреЛрд░рдВрдЬрдХ рдорддрднреЗрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рдХрд╣рд╛рдирд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдХрд┐рдП рдмрд┐рдирд╛, рдореИрдВ рдЖрдкрдХреЛ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛, рдЬрд┐рд╕рдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдЬрд╛рд╡рд╛ рд╕реЗ рдПрдХ рдПрд▓рд┐рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдмрд╛рдж рдореЗрдВ, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ-рд╕реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рд╡рд╛ рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕рд┐рд░реНрдл рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИред рднрд╛рд╖рд╛ рдХреЗрд╡рд▓ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдореБрд╣рд╛рд╡рд░реЗ рд╣реИред рдореИрдВ рдлрд┐рд░ рд╕реЗ рдЬреЛрд░ рджреЗрддрд╛ рд╣реВрдВ - рдпрд╣ рдПрдХ рдЧрд╛рдЗрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░реНрдпрдЯрдХ рдиреЛрдЯ рд╣реИрдВред рдпрджрд┐ рд╡реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдмрд╛рдж рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ред
рднреЗрдЬреЗрдВ, рдХреЙрд▓ рдирд╣реАрдВ, рд╕рдВрджреЗрд╢, рд╡рд┐рдзрд┐рдпрд╛рдБ рдирд╣реАрдВ
Java:
object.method(param);
Objective-C:
[object method:param];
Java , Objective-C тАФ . . -, , ( , , , Java ), (
selector), -. , , .
, Java , (
warning). тАФ . тАФ .
?
Java:
public Feature addFeature (String name, String value, boolean isOptional);
Objective-C:
-(Feature*) addFeature :(NSString*)name withValue:(NSString*)value asOptional:(BOOL) optional:
Objective-C тАЬтАЭ . , ,
addFeature:withValue:asOptional:SEL selector = @selector(addFeature:withValue:asOptional:);
, , , 16 . 16 .
: ,
Java
Objective-C:
@interface NSString (LetsAugment)
-(BOOL) isGoodActor;
@end
,
NSObject. (
category).
LetsAugment,
isGoodActor NSString.
NO (false Java), ,
YES (true) , . тАФ :
if ([@тАЭSteven SeagalтАЭ isGoodActor]) NSLog (@тАЭYeah!тАЭ) else NSLog (@тАЭWhat's wrong with you?тАЭ);
, , .
, -, . , , . . -, .
:
Java:
MyTao tao = null;
int howManyHands = tao.clap();
Objective-C:
MyTao* tao = nil;
int howManyHands = [tao clap];
, ,
NullPointerException , , . тАФ
howManyHands 0. 1, , .
.
nil (null Java), (nil, 0, NO ..). , .
Java: ()
class Profile {
int getVersion() {
...
}
class Feature {
Profile getProfile(String name) {
...
}
class Phone {
Feature getFeature(String name) {
...
}
class PhoneFactory {
static Phone designAndProduce(String model) {
...
}
}
...
int version = 0;
Phone phone = PhoneFactory.designAndProduce(тАЬiphone5тАЭ);
Feature btFeature = phone.getFeature(тАЬbtтАЭ);
if (btFeature != null) {
Profile profile = btFeature.getProfile(тАЬa2dpтАЭ);
if (profile != null) {
version = profile.getVersion();
}
}
Objective-C:
@interface Profile : NSObject
@property (readonly) int version;
@end
@interface Feature : NSObject
- (Profile*) getProfile:(NSString*)name;
@end
@interface Phone : NSObject
+ (Phone*) designAndProduce:(NSString*)name;
-(Feature*) getFeature:(NSString*)name;
@end
...
Phone* phone = [Phone designAndProduce:@"iphone5"];
Feature* btFeature = [phone getFeature:@"bt"];
Profile* profile = [btFeature getProfile:@"a2dp"];
int version = profile.version;
Objective-C Java .
[phone getFeature:@┬лbt┬╗] nil, version 0.
┬л ┬╗? nil , , , . (getter/setter). , Objective-C (-
profile.version?) тАФ (
property), .