Swift-style-guide: إعادة النظر في تهيئة الصفيف والقاموس الفارغة

تم إنشاؤها على ٧ أبريل ٢٠١٦  ·  3تعليقات  ·  مصدر: raywenderlich/swift-style-guide

ينص دليل النمط الحالي على تهيئة المصفوفات والقواميس بالطريقة التالية.

var names = [String]()
var lookup = [String: Int]()

أود أن أدافع عن هذا لصالح:

var names: [String] = []
var lookup: [String: Int] = [:]

هذا هو الأساس المنطقي الخاص بي:

  • يبدو [Type]() أجنبيًا ، خاصة بالنسبة للوافدين الجدد. بالنسبة لي ، يقرأ : [Type] = [] ببساطة أفضل في كثير من الحالات.
  • عندما أقوم بتمرير مصفوفة فارغة (أو OptionSetType) كوسيطة حيث يكون الاستدلال من النوع متاحًا ، فأنا دائمًا أستخدم [] ، وليس كائنًا مهيأ افتراضيًا. هناك بعض الاتساق هنا.
  • بالنسبة إلى المصفوفات القصيرة أحادية السطر ، يمكن غالبًا استنتاج النوع. هذا جيد ويجب استخدامه. ومع ذلك ، بالنسبة للمصفوفات التي تمتد عبر أسطر متعددة ، يمكن أن يصبح الاستدلال بالنوع مكلفًا. يعتبر:
var stuff = [1, 2, 3, 4, 5,  // ... 100 more numbers
                  106.7, 107, "haha", nil, 108, 109]

يحتاج مدقق النوع إلى مسح جميع العناصر لكتابة الاستنتاج بشكل صحيح stuff . حتى في حالة عدم وجود حيل ("هاها") ، فقد رأيت هذا المستنقع يسقط المحرر. (مرحبًا قوس قزح.) يبدو أن جعل مدقق النوع يعمل من أجلك لمضاعفة التحقق من عملك فكرة جيدة.

ما رأيك؟

التعليق الأكثر فائدة

rayfix لقد نمت لأفضل التنسيق المقترح الخاص بك ، مثل var names: [String] = []

منطقتي هي أن هذا النهج يبدو أكثر اتساقًا مع النهج الذي ستتبعه عندما تريد تحديد مصفوفة بثابت let . (لن تقوم بتهيئته إلى مصفوفة فارغة لأنك لن تكون قادرًا على تغييره لاحقًا)

على سبيل المثال في حالة الفصل:

class SimpleClass {
    let array: [String]

    init(array: [String]) {
        self.array = array
    }    
}

أو عند تحديد مصفوفة ثابتة تعتمد قيمتها على شرط.

let array: [String]
if condition {
    array = array1
} else {
    array = array2
}

ال 3 كومينتر

rayfix لقد نمت لأفضل التنسيق المقترح الخاص بك ، مثل var names: [String] = []

منطقتي هي أن هذا النهج يبدو أكثر اتساقًا مع النهج الذي ستتبعه عندما تريد تحديد مصفوفة بثابت let . (لن تقوم بتهيئته إلى مصفوفة فارغة لأنك لن تكون قادرًا على تغييره لاحقًا)

على سبيل المثال في حالة الفصل:

class SimpleClass {
    let array: [String]

    init(array: [String]) {
        self.array = array
    }    
}

أو عند تحديد مصفوفة ثابتة تعتمد قيمتها على شرط.

let array: [String]
if condition {
    array = array1
} else {
    array = array2
}

+1 كبيرة على هذا!

لقد اخترت الترميز var array: [Type] = [] لدوراتي لأنه يسمح لي بتدريس المصفوفات (والقواميس) في وقت مبكر إلى حد ما في دوراتي. نهج التدريس الخاص بي هو البدء من الصفر ، وإضافة موضوع واحد فقط في كل مرة وعدم ترك الأشياء بدون تفسير. يسمح لي هذا الترميز بالقيام بذلك لأنه لا يتضمن أي مواضيع لم يعرفها الطلاب بعد في هذه المرحلة ، مثل المُبدِعين أو الأدوية الجنيسة.

أحبها. أستخدم بناء الجملة الذي اقترحته في قواعد البرمجة الخاصة بي ؛ تعريف ونوع var على جانب واحد من المعادلة ، والقيمة على الجانب الآخر. جميل وبسيط.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

agirault picture agirault  ·  3تعليقات

jrturton picture jrturton  ·  3تعليقات

xezun picture xezun  ·  6تعليقات

samkim102 picture samkim102  ·  4تعليقات

ghost picture ghost  ·  26تعليقات