私は最終的に Objective-C を試してみることにした Web デザイナー/開発者です。私は、標準化を強く信じており、言語によって定められたガイドライン、フォーマット、または不文律を順守することを強く信じており、それをどのように行うべきかについて自分の考えを押し付けたり、独自の方法を使用したりするのではありません (しゃれは意図されていませんが、それと一緒に行きます)。言い換えれば、私はcamelCaseVarNames
orを使ってコードを書くことにオープンですunderscore_var_names
。上記の言語で「一般的に受け入れられている」方法が何であるかを知りたいだけです。
とにかく、特に既存のクラスを拡張する場合に、Objective-C メソッドを記述する適切な方法を知りたいです。私は赤ちゃんの一歩を踏み出しているので、MVC の設計パターンや「懸念事項の分離」については今のところ心配していません。私はデフォルトのAppDelegate
実装ファイルで作業しています (ええ、私はワルです)。<head>
CSS を学ぶときに、HTML ファイルの中にたくさんのスタイルを書くのと同じだと思いたいのですが。このボタンの機能とそのボタンの機能を確認しようとしています。わかる?
さて、ここにシナリオがあります。ビューが特定のクラスのものかどうかを確認する単純なメソッドを書きたいとします。これを行う方法はたくさんあると思いますが(NSObject
そのような機能を必要とせずにすべての方法がこの機能を持っている可能性があります)、冗談を言います。これが私が思いついたものです(お気軽に笑ってください):
- (BOOL)viewInstance:(id)view isOfClass(NSString *)className
{
return ( [view class] == NSClassFromString(className) );
}
私が抱えている問題はviewInstance:
、それ自体ではかなり無意味であり、私が読んだことによると、Objective-Cer は superRichAndDescriptiveMethodNamesThatAreSelfDocumenting を愛しています。そうは言っても、メソッド名全体には 2 番目の部分が含まれます — 2 番目の部分は名前付きの引数またはパラメーターであると想定しています。一緒に読むと、実際には少し意味があります。私が話していることの実際の例は、NSColor
のcolorWithDeviceRed
メソッドです。Red:
が最初のパラメーターであることに気付く前に、ポップアップ補完リストを 20 回調べました。完全な宣言は次のとおりです。
+ (NSColor *)colorWithDeviceRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha
関数に特定の方法で名前を付ける時期および/または方法について、私は混乱しているだけだと思います。また、オブジェクトの初期化は私を混乱させます。私が知っている言語では、次のような配列を作成します。
// JavaScript
var myArray = [ 1, 2, 3 ];
// PHP
$my_array = array( 1, 2, 3 );
// AppleScript
set myArray to { 1, 2, 3 }
// ActionScript
var myArray:Array = new Array( 1, 2, 3 );
// Python
my_array = [ 1, 2, 3 ]
// P.S. I add spaces between brackets because I'm a special boy, so no judgments.
Objective-C では、どちらを使用すればよいかわかりません。
NSArray *myArray = [NSArray new];
NSArray *myArray = [NSArray array];
NSArray *myArray = [[NSArray alloc] init];
NSArray *myArray = [[NSArray alloc] initWithArray:@[1,2,3]];
NSArray *myArray = [NSArray arrayWithArray:@[1,2,3]];
NSArray *myArray = @[1,2,3];
配列リテラルは、他の言語から来るのが最も理にかなっているからです。私が本当に理解していないのは、上記のステートメントでinitWithArray
メソッドとメソッドがどのように存在するかarrayWithArray
です。うーん。同じ基になるメソッドを呼び出しますか?
私を本当に混乱させるのはこれです:
[[NSDictionary alloc] initWithDictionary:(NSDictionary)]
[[NSDictionary alloc] initWithDictionary:(NSDictionary) copyItems:(bool)]
NSDictionary のヘッダー ファイルを見ると、2 つの別々のメソッドのように見えます。私は次のようなオプションの引数を見ることに慣れています:
function initWithObject(object, copyItems) {
var obj = {};
if ( copyItems ) {
...
}
return obj;
}
私の例では、含まれていると関数の流れが変わるオプションの引数があります。2 つのメソッドについては、おそらく完全に間違っていますが、Objective-C について少し知っている限りでは、そのように見えます。とはいえ、ネットオタクだからといって逃げるつもりはありません。ええ、スレッドをスリープ状態にして のようなものを書けるのは少し怖いですがNSTerminateNow
、皆さんの助けを借りて、実際に 1 つまたは 2 つのことを学ぶことができると思います。では、教えてください!
私の文章は少し「冗長」になることがありますので、ここまで読んでいただきありがとうございます。