Swift-style-guide: Inkonsistensi dalam menginisialisasi array dan kamus kosong

Dibuat pada 7 Apr 2017  ·  4Komentar  ·  Sumber: raywenderlich/swift-style-guide

Saya harus mengatakan, saya setuju dengan sebagian besar dari apa yang dinyatakan dalam pedoman, tetapi yang ini tampaknya tidak konsisten:

https://github.com/raywenderlich/swift-style-guide#type -annotation-for-empty-arrays-and-dictionaries

Panduan menunjukkan:

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

lebih disukai daripada

// not preferred
var names = [String]()
var lookup = [String: Int]()

Tetapi panduan ini biasanya lebih menyukai tipe yang disimpulkan untuk kepentingan kode ringkas:

// preferred
let message = "Click the button"
let currentBounds = computeViewBounds()

```cepat
// tidak disukai
biarkan pesan: String = "Klik tombol"
biarkan currentBounds: CGRect = computeViewBounds()

If we were being consistent, shouldn't we always prefer inferred types over explicit declaration?  I would think this is more consistent
```swift
// should be preferred
var names = [String]();
var lookup = [String: Int]();

Komentar yang paling membantu

Menurut pendapat saya, panduan ini benar di sini. Itu hanya mengatakan, bila diperlukan, tentukan jenisnya. Bila tidak, jatuhkan.

Oke, tapi bukankah ini benar-benar pilihan gaya? Tidak terlalu. Mari kita lihat beberapa contoh:

// preferred
var colors: [UIColor]?
var colors: [UIColor] = []
var colors: [UIColor] = [.red, .green, .blue]

Sekarang, mari ubah 3 contoh tersebut menjadi preferensi yang Anda sarankan.

var colors: [UIColor]?
var colors = [UIColor]()
var colors = [UIColor.red, UIColor.green, UIColor.blue]

Lihat apa yang terjadi di sana? Untuk baris terakhir, kita sekarang perlu mengulang UIColor untuk setiap elemen dalam array. Anda mungkin juga berpendapat bahwa deklarasi sekarang kurang konsisten satu sama lain.

Lalu bagaimana dengan metode? Yah, Anda tentu saja dapat memilih untuk selalu menentukan jenis demi konsistensi. Namun, saya membayangkan bahwa sebagian besar pengembang ingin menghapus kode yang berlebihan.

// do we need to specify type?
var colors: [UIColor] = rainbowColors()
// no we don't
var colors = rainbowColors()

Apakah itu masuk akal?

_Edit: Dalam semua keadilan, Anda juga dapat menyimpulkan array seperti ini tetapi mengingat kita berbicara tentang konsistensi, saya mempertimbangkan yang ini dari tabel. Hanya berpikir saya akan benar._

// preferred
var colors: [UIColor] = [.red, .green, .blue]
// not preferred
var colors = [.red, UIColor.green, .blue]

Semua 4 komentar

Menurut pendapat saya, panduan ini benar di sini. Itu hanya mengatakan, bila diperlukan, tentukan jenisnya. Bila tidak, jatuhkan.

Oke, tapi bukankah ini benar-benar pilihan gaya? Tidak terlalu. Mari kita lihat beberapa contoh:

// preferred
var colors: [UIColor]?
var colors: [UIColor] = []
var colors: [UIColor] = [.red, .green, .blue]

Sekarang, mari ubah 3 contoh tersebut menjadi preferensi yang Anda sarankan.

var colors: [UIColor]?
var colors = [UIColor]()
var colors = [UIColor.red, UIColor.green, UIColor.blue]

Lihat apa yang terjadi di sana? Untuk baris terakhir, kita sekarang perlu mengulang UIColor untuk setiap elemen dalam array. Anda mungkin juga berpendapat bahwa deklarasi sekarang kurang konsisten satu sama lain.

Lalu bagaimana dengan metode? Yah, Anda tentu saja dapat memilih untuk selalu menentukan jenis demi konsistensi. Namun, saya membayangkan bahwa sebagian besar pengembang ingin menghapus kode yang berlebihan.

// do we need to specify type?
var colors: [UIColor] = rainbowColors()
// no we don't
var colors = rainbowColors()

Apakah itu masuk akal?

_Edit: Dalam semua keadilan, Anda juga dapat menyimpulkan array seperti ini tetapi mengingat kita berbicara tentang konsistensi, saya mempertimbangkan yang ini dari tabel. Hanya berpikir saya akan benar._

// preferred
var colors: [UIColor] = [.red, .green, .blue]
// not preferred
var colors = [.red, UIColor.green, .blue]

Saya akan pergi dengan

var colors: [UIColor]?
var colors = [UIColor]()
var colors: [UIColor] = [.red, .green, .blue]

Alih-alih apa yang Anda lakukan di atas. Apakah kita tidak lebih suka menggunakan tipe yang disimpulkan kecuali ketika deklarasi eksplisit diperlukan? Dalam pengertian itu, baris ketiga tampaknya konsisten.

Anda benar dalam arti bahwa saya mungkin terlalu menyederhanakan aturan. Karena itu, tidak ada yang salah dengan kedua pendekatan itu, itu hanya tergantung pada preferensi. Dalam kasus saya, saya menemukan di bawah ini lebih konsisten, lebih mudah dibaca, dan lebih praktis ketika bolak-balik keadaan kosong/tidak kosong. Saya pikir kita harus membiarkan orang lain ikut campur.

// preferred
var colors: [UIColor]?
var colors: [UIColor] = []
var colors: [UIColor] = [.red]
// not preferred (in my opinion)
var colors: [UIColor]?
var colors = [UIColor]()
var colors: [UIColor] = [.red]

Masalah yang Anda miliki dengan itu adalah inkonsistensi ini:

// inconsistent?
var colors: [UIColor] = []
var colors = rainbowColors()
// your preference
var colors = [UIColor]()
var colors = rainbowColors()

@RobertGummesson , Anda hanya mempertimbangkan tipe yang paling sering digunakan dengan sintaks literal array/kamus. Jika kita hanya memiliki array untuk diisi dengan literal array, kedua solusi akan baik-baik saja. Saya bahkan biasa menggunakan apa yang Anda sarankan. Tapi kemudian kami mendapat set, dan saya harus membuat standar pada konvensi yang menyertakannya juga. Yang Anda sarankan lebih jelek daripada pengetikan eksplisit.

var ints: Set = [1, 1, 2, 2]
var ints = Set([1, 1, 2, 2])
var ints = Set(arrayLiteral: 1, 1, 2, 2)

Jadi, setelah menentukan pilihan teratas yang lebih baik untuk set yang tidak kosong, versi kosong, dan konvensi array yang cocok, dapat diformat ulang.

var ints: Set<Int> = []
var ints = Set<Int>() // instead of this, which, without the above, seems fine.

var ints = [1, 1, 2, 2]
var ints: [Int] = []
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

jackwu95 picture jackwu95  ·  6Komentar

rayfix picture rayfix  ·  3Komentar

luki picture luki  ·  3Komentar

sima-11 picture sima-11  ·  5Komentar

ghost picture ghost  ·  26Komentar