訳あってAWSのコードを読んでたらいいなと思える実装に出会った
訳あってAWSのコードを読んでたらいいなと思える実装に出会った
+ (instancetype)defaultPinpointTargeting { static AWSPinpointTargeting *_defaultPinpointTargeting = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ AWSServiceConfiguration *serviceConfiguration = nil; AWSServiceInfo *serviceInfo = [[AWSInfo defaultAWSInfo] defaultServiceInfo:AWSInfoPinpointTargeting]; if (serviceInfo) { serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:serviceInfo.region credentialsProvider:serviceInfo.cognitoCredentialsProvider]; } if (!serviceConfiguration) { serviceConfiguration = [AWSServiceManager defaultServiceManager].defaultServiceConfiguration; } // ↓この部分です。 if (!serviceConfiguration) { @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"The service configuration is `nil`. You need to configure `awsconfiguration.json`, `Info.plist` or set `defaultServiceConfiguration` before using this method." userInfo:nil]; } _defaultPinpointTargeting = [[AWSPinpointTargeting alloc] initWithConfiguration:serviceConfiguration]; }); return _defaultPinpointTargeting; }
(うわ、はてブ、objective-cのシンタックスハイライトサポートしていない...)
当該部分のコードはここですね。→ aws-sdk-ios/AWSPinpointTargetingService.m at f114d767fef60c61be595f4e614ced3c4d2600ef · aws/aws-sdk-ios · GitHub
疑似コードみたいに切り出すと
object = nil if (condintion1) { object = hogehoge.create } if (condintion2) { object = fugafuga.create } if (object == nil) { throw “object is nil” } return object
こんな実装になっていて、returnの前にnilチェックしているため、optionalな型が保証されてない世界でこの関数の帰り値がnilにならないことが読みとりやすい感じがする。すてき