Advertisement
  1. Code
  2. Swift

8 cara baru untuk Refactor kode dengan Swift 4

Scroll to top
Read Time: 6 min

() translation by (you can also view the original English article)

Optimizing Swift 4Optimizing Swift 4Optimizing Swift 4

Swift adalah salah satu bahasa yang tumbuh paling cepat dalam sejarah, karena elegan, sederhana, dan "safety berdasarkan desain". Bahkan, mantra resmi Swift adalah "untuk membuat pemrograman hal-hal sederhana menjadi mudah, dan hal-hal yang sulit mungkin". Dalam posting ini, Anda akan belajar bagaimana menggunakan Swift sepenuhnya dengan refactoring code Anda.

Meskipun banyak pengoptimalan kode implisit dan jelas melekat dalam desain bahasa, ada strategi refactoring tertentu yang dapat membuat code Anda lebih mudah dibaca, lebih andal, dan berkinerja lebih baik. Dalam artikel ini, Anda akan belajar delapan cara untuk refactor code Anda dengan Swift 4.

Tujuan dari artikel ini

Dalam artikel ini, Anda akan mempelajari beberapa cara untuk mengoptimalkan dan mem-refactor kode Anda dengan Swift 4. Kita akan membahas hal-hal berikut:

  1. handling duplicate key dalam kamus secara elegan dengan zip
  2. pengaturan value default untuk dictionary
  3. menggabungkan dictionary menjadi satu
  4. memfilter value dictionary data secara langsung ke objek dictionary lain
  5. menggunakan Codable untuk menyimpan objek khusus ke dalam JSON
  6. swapping value dalam array yang bisa berubah
  7. handling multi-line literal
  8. menemukan random element dalam koleksi

1. Duplicate Keys dalam Dictionary

Pertama, Swift 4 lebih meningkatkan dictionary dengan cara yang elegan untuk menangani duplicate key menggunakan generic function zip. zip berfungsi pada lebih dari sekedar dictionary, dan sebenarnya itu akan membiarkan Anda membangun tipe squence sendiri dari dua collectin yang mendasari yang sesuai dengan Squence.

Misalnya, Anda memiliki array dengan nilai-nilai berikut, memperhatikan dua elemen yang mengandung key yang sama:

1
let locations = [ "Springfield", "Chicago", "Springfield", "Jackson"]
2
var dictionary: Dictionary<String, String>

Dengan menggunakan zip, Anda dapat membuat squence pasangan unik:

1
let locations = [ "Springfield", "Chicago", "Springfield", "Jackson"]
2
3
var dictionary = Dictionary(zip(locations, repeatElement(1, count: locations.count)), uniquingKeysWith: +)
4
5
print(dictionary) // ["Jackson": 1, "Chicago": 1, "Springfield": 2]

UniquingKeysWith elemen dalam kode di atas memungkinkan Anda untuk membuat values unik melalui penggunaan sebuah operator matematika. Dalam hal ini, kita menggunakan + untuk menaikkan value setiap kali duplicate entry ditemukan. Tentu saja, Anda juga dapat memutuskan untuk menggunakan custom increment logic Anda sendiri.

2. Default Values untuk Dictionaries

Fitur lain yang kuat di Swift 4 adalah kemampuan untuk menetapkan nilai default untuk dictionary, menggunakan subscript yang baru ditambahkan. Dalam kode berikut, ketika Anda mengakses key value di dictionary, value yang dikembalikan adalah optional value, yang akan menghasilkan nil jika key tersebut tidak ada:

1
let locationsAndPopulations = [ "Springfield": 115715, "Chicago": 2705000, "Aurora": 201110]
2
print(locationsAndPopulations["Springfield"]) //value is optional
3
print(locationsAndPopulations["New York"]) //this key doesn't exist, returns nil

Biasanya Anda harus menangani kemungkinan nil dalam optional values, tetapi Swift 4 membuatnya sedikit lebih nyaman bagi Anda, melalui subscript baru yang memungkinkan Anda untuk menambahkan parameter default, daripada memaksa Anda untuk menjaga atau unwrap optionals.

1
print(locationsAndPopulations["New York", default: 0])

Dalam hal ini, karena kita tidak memiliki entry untuk New York di array awal kita, itu akan mengembalikan parameter default 0. Anda juga dapat menyuntikkan nilai dinamis yang bertentangan dengan nilai literal statis jika Anda perlu, yang tentunya membuat fitur subscript yang jauh lebih kuat.

3. Menggabungkan Dictionaries

Swift 4 juga membuatnya lebih mudah untuk menggabungkan dua dictionary menjadi satu melalui penggunaan merge(_:uniquingKeysWith:). Dalam contoh berikut, kita menggabungkan kedua Kamus ke pertama, dan melalui penggunaan uniquingKeysWith parameter yang baru belajar, kita dapat memastikan duplikat akan ditangani harus mereka terjadi:

1
var locationsAndPopulationsIL = [ “Springfield”: 115715, “Chicago”: 2705000, “Aurora”: 201110]
2
3
let location2 = [ “Rockford”: 152871, “Naperville”: 141853, “Champaign”: 81055]
4
5
locationsAndPopulationsIL.merge(location2, uniquingKeysWith: +)
6
print(locationsAndPopulationsIL)

Dengan tidak adanya fungsi ini, Anda biasanya harus secara manual melintasi semua value dari dictionary dan menerapkan custom logic dalam menggabungkan dua dictionary menjadi satu.

4. Memfilter Value Dictionary Ke dalam Dictionary Lain

Selain penggabungan dua kamus, Anda dapat juga secara dinamis menyaring Kamus dengan hasil diarahkan kembali ke kamus lain dari jenis yang sama. Dalam potongan code berikut ini, kita memfilter dictionary location dengan nilai tertentu, dikembalikan sebagai dictionary:

1
let locationsAndPopulationsIL = [ "Springfield": 115715, "Chicago": 2705000, "Aurora": 201110]
2
3
let filteredmillionPlusPopulation = locationsAndPopulationsIL.filter{ $0.value > 1000000 }
4
5
print(filteredmillionPlusPopulation)  //["Chicago": 2705000]

Jadi, di luar filtering sederhana, Anda juga dapat menggunakan penutupan filter untuk menyediakan filter khusus yang akan memuncak dalam hasil dictionary baru.

5. Simpan Custom Objects ke JSON

Jika Anda pernah membuat serial (dan deserialized) data sebelumnya, itu bisa sangat terlibat, harus subclass classes  dengan NSObject, serta menerapkan NSCoding. Dengan Swift 4, Anda dapat lebih efisien membuat serial classes Anda melalui penggunaan Codable. Ini sangat berguna ketika Anda ingin bertahan dengan membuat serial custom object Anda menjadi JSON object, baik untuk meneruskan ke API atau bahkan tetap menggunakan LocalDefaults secara lokal:

1
// a class to serialize
2
class Location: Codable{
3
    var name: String
4
    var population: Int
5
    
6
    init(name: String, population: Int){
7
        self.name = name
8
        self.population = population
9
    }
10
}
11
12
//create an instance
13
let chicago = Location(name: "chicago", population: 2705000)
14
15
//serialize to JSON
16
let jsonData = try? JSONEncoder().encode(chicago)
17
18
//deserialize and output
19
if let data = jsonData{
20
    let jsonString = String(data: data, encoding: .utf8)
21
    print(jsonString!) //{"name":"chicago","population":2705000}
22
23
}

Seperti yang Anda lihat, dengan mengatur class atau struct ke Codable, Anda dapat dengan mudah membuat serial data Anda ke JSON, mempertahankan data di suatu tempat, dan deserialize kembali.

6. Swapping Values di Mutable Arrays

Beralih ke array, welcome feature lain di Swift 4 adalah kemampuan untuk menukar dua nilai secara langsung dalam array yang dapat berubah, dengan menggunakan swapAt(_:_:). Ini akan sangat berguna untuk fungsi seperti penyortiran algoritma, dan ini sangat mudah digunakan:

1
var locations = [ "Springfield", "Chicago", "Champaign", "Aurora"]
2
3
locations.swapAt(0, 2)
4
print(locations) //["Champaign", "Chicago", "Springfield", "Aurora"]

Sebelumnya, Anda harus menggunakan variabel sementara untuk bertukar di antara dua element location, tetapi dengan metode ini, Anda bisa lebih ringkas mengurutkan array Anda.

7. Handling Multi-Line Literal

Penambahan keren lainnya ke Swift 4 adalah kemampuan menyimpan string literal multi-line dalam nilai Anda, membuatnya sangat mudah untuk memecah konten literal Anda menjadi lebih rapi. Melalui penggunaan notasi """ untuk membuka dan menutup block text, Anda dapat membuat konten multi-line dan bahkan mereferensikan variabel dinamis, seperti yang ditunjukkan di bawah ini ketika kita secara dinamis menambahkan tanggal.

1
let illinoisIntro = """
2
Illinois is a state in the Midwestern United States. It is the 5th most 
3
populous and 25th largest state, and is often noted as a microcosm of 
4
the country. With Chicago and its suburbs in the northeast, small industrial 
5
cities and great agricultural productivity in central and northern Illinois, 
6
and natural resources like coal, timber, and petroleum in the south, Illinois 
7
has a diverse economic base and is a major transportation hub. 
8
(Source: Wikipedia - Dated \(Date())
9
"""
10
print(illinoisIntro)

8. Memilih Random Elements dalam Collection

Baru di Swift 4.2 adalah kemampuan untuk memilih random element dalam koleksi dengan fungsi randomElement. Bahkan, tidak hanya array tetapi setiap objek yang sesuai dengan Collection protocol dapat memanfaatkan fungsi yang bagus ini. Contoh berikut menggunakan location array kita, dan itu akan mencetak random city dari array tersebut:

1
let locations = [ "Springfield", "Chicago", "Springfield", "Jackson"]
2
3
let randomElement = locations.randomElement()
4
print(randomElement!)

Kesimpulan

Dalam artikel ini, Anda mempelajari beberapa teknik berguna yang digunakan Swift 4 untuk membantu membuat code yang lebih ringkas, fokus, dan teroptimalkan. Dalam iterasi keempatnya, Swift jelas telah membuat langkah dalam membantu Anda me-refactor code Anda agar lebih mudah dibaca dan dapat diandalkan. Swift 4.x belum selesai, dan saya mendorong Anda untuk mengikuti halaman Swift evolution resmi untuk mencatat semua proposal baru dalam pipeline yang akan dibahas.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.