Buku "Swift. Dasar-dasar pengembangan aplikasi untuk iOS, iPadOS dan macOS. Edisi ke-5. ditambah dan direvisi "

gambar Hai, habrozhiteli! Bahasa Swift masih muda, tumbuh, berkembang dan berubah, meskipun pendekatan dasar untuk pemrograman dan pengembangan telah dibentuk. Dalam edisi kelima buku yang baru, bagian pertama dari buku itu sepenuhnya direvisi, yang membuat kenalan dengan bahasa Swift lebih nyaman, dan seluruh teks diperbarui sesuai dengan kemampuan Swift 5. Selama komunikasi yang panjang dan berbuah dengan pembaca, banyak ide muncul, berkat edisi baru itu menjadi, bahkan materi pendidikan yang lebih bermanfaat dan kaya. Sekarang Anda tidak hanya akan belajar Swift, tetapi juga mendapatkan informasi awal tentang prinsip-prinsip pengembangan aplikasi lengkap. Dunia Swift terus berubah, orang-orang dengan simpanan pengetahuan dan pengalaman yang signifikan belum ada karena usia bahasa, sehingga Anda bisa menjadi salah satu spesialis pertama.

Kutipan. Bab 6. Tuple


Anda mungkin belum pernah menemukan konsep seperti tuple dalam pemrograman, namun, ini adalah salah satu fitur yang sangat berguna yang tersedia di Swift. Tuples, misalnya, dapat digunakan untuk bekerja dengan koordinat. Setuju, akan jauh lebih mudah untuk menggunakan konstruksi (x, y, z) yang ditulis dalam satu variabel daripada membuat variabel terpisah untuk setiap sumbu koordinat.

6.1. Dasar-dasar Tuple


Sebuah tuple adalah objek yang mengelompokkan nilai berbagai jenis dalam satu nilai komposit.

Tuples adalah cara termudah yang Swift dapat menggabungkan nilai-nilai dari jenis yang berubah-ubah. Setiap nilai individu dalam tuple mungkin memiliki tipe data sendiri, yang tidak bergantung pada orang lain dengan cara apa pun.

Motorcade literal


Sebuah tuple dapat dibuat menggunakan tuple literal .

Sintaksis

(_1, _2, ..., _N) 

β€’ value: Any - nilai selanjutnya dari tipe data arbitrer, termasuk dalam tuple.

Tuple literal mengembalikan nilai yang didefinisikan di dalamnya sebagai tuple. Literal dikelilingi oleh tanda kurung dan terdiri dari seperangkat nilai independen, dipisahkan oleh koma. Jumlah elemen dapat berubah-ubah, tetapi tidak disarankan untuk menggunakan lebih dari tujuh.

CATATAN

Lebih jauh di sepanjang teks akan ada sejumlah besar blok Sintaks. Mereka menggambarkan bagaimana konstruksi tersebut dapat digunakan dalam program nyata. Sebelum melanjutkan ke blok-blok ini, perlu untuk menggambarkan struktur blok ini, serta elemen-elemen yang digunakan.

Baris pertama akan selalu secara langsung menentukan sintaks itu sendiri yang menggambarkan penggunaan konstruk dalam kode program. Dalam hal ini, elemen kondisional dapat digunakan (misalnya, value_1, value_2 dan value_N dalam sintaksis di atas). Biasanya mereka ditulis dalam bentuk teks untuk memahami tujuan mereka.

Deskripsi rinci elemen bersyarat dapat mengikuti. Dalam beberapa kasus, elemen dapat dikelompokkan (seperti dalam sintaks di atas, di mana alih-alih elemen value_1, value_2, dll., Nilai elemen dijelaskan, persyaratan yang berlaku untuk semua elemen dengan nama yang diberikan).

Setelah nama elemen kondisional, tipe datanya dapat ditunjukkan. Selain itu, jika nilai spesifik dari jenis tertentu (misalnya, string, numerik, logis, dll.) Harus digunakan sebagai elemen, maka jenisnya dipisahkan oleh titik dua (:). Namun, jika ekspresi dapat digunakan sebagai elemen (misalnya, a + b atau r> 100), maka jenisnya akan ditunjukkan setelah tanda hubung dan braket sudut kanan mewakili panah (->). Itu dapat didefinisikan sebagai satu (misalnya, Int), dan banyak tipe data (misalnya, Int, String).

Sintaks di atas menggunakan Any sebagai penunjuk ke tipe data. Any singkatan untuk semua tipe data. Dalam proses pembelajaran, Anda akan menemukan lebih banyak jenis yang dapat ditentukan dalam blok sintaks ini.

Penjelasan terperinci dari sintaks, serta contoh penggunaannya, dapat mengikuti.
Saya menyarankan Anda untuk menandai halaman ini sehingga jika perlu
selalu kembali ke sini.
Sebuah tuple disimpan dalam variabel dan konstanta dengan cara yang sama seperti nilai tipe data fundamental.
Sintaksis

 let  = (_1, _2, ..., _N) var  = (_1, _2, ..., _N) 

Deklarasikan variabel dan konstanta dan inisialisasi dengan tuple literal yang terdiri dari elemen N sebagai nilai. Untuk menulis tuple ke variabel, Anda harus menggunakan pernyataan var, dan untuk menulis ke konstanta, Anda harus menggunakan pernyataan let.
Perhatikan contoh berikut. Kami mendeklarasikan konstanta dan menginisialisasi dengan tuple yang terdiri dari tiga elemen tipe: Int, String, dan Bool (Listing 6.1).

Daftar 6.1

 let myProgramStatus = (200, "In Work", true) myProgramStatus // (.0 200, .1 "In Work", .2 true) 

Dalam contoh ini, myProgramStatus adalah konstanta yang berisi tuple sebagai nilai yang menggambarkan status program tertentu dan terdiri dari tiga elemen:

  • 200 - integer dari tipe Int, kode status program;
  • "Dalam pekerjaan" - string literal dari tipe String, deskripsi tekstual dari status program;
  • true - nilai logis dari tipe Bool, kemampuan untuk melanjutkan operasi program.

Tuple ini mengelompokkan nilai-nilai dari tiga tipe data yang berbeda dalam satu konstanta terinisialisasi tunggal.

Tipe data Tuple


Tetapi jika tupel mengelompokkan nilai dari berbagai tipe data menjadi satu, lalu apa tipe data dari tupel itu sendiri dan parameter yang menyimpan nilainya?

Tipe data tuple adalah urutan nama-nama tipe data yang tetap dan teratur untuk elemen tuple.
Sintaksis

 (____1, ____2, ..., ____N) 

Tipe data dilampirkan dalam tanda kurung, dan nama tipe elemen dipisahkan oleh koma. Urutan nama tipe harus sesuai dengan urutan elemen dalam tuple.

Contoh


 (Int, Int, Double) 

Jenis data tuple myProgramStatus dari Listing 6.1 adalah (Int, String, Bool). Tipe data diatur secara implisit, karena ditentukan secara otomatis berdasarkan elemen tuple. Karena urutan menentukan tipe data harus cocok dengan urutan elemen dalam tupel, jenis (Bool, String, Int) berbeda dari (Int, String, Bool).

Listing 6.2 membandingkan tipe data dari berbagai tuple.

Daftar 6.2

 var tuple1 = (200, "In Work", true) var tuple2 = (true, "On Work", 200) print( type(of:tuple1) == type(of:tuple2) ) 

Konsol

 false 

Untuk membandingkan tipe data tupel, nilai yang dikembalikan oleh tipe fungsi global (dari :), yang menentukan tipe objek yang diteruskan ke sana, digunakan.
Asumsikan bahwa dalam tuple myProgramStatus, elemen pertama harus berupa nilai Float bukan bilangan bulat. Dalam hal ini, Anda dapat secara eksplisit menentukan tipe data tuple (titik dua setelah nama parameter) (Listing 6.3).

Daftar 6.3

 //       let floatStatus: (Float, String, Bool) = (200.2, "In Work", true) floatStatus // (.0 200.2, .1 β€œIn Work”, .2 true) 

Anda tidak terbatas pada jumlah elemen tuple tertentu. Sebuah tuple dapat mengandung elemen sebanyak yang diperlukan (tetapi ingat bahwa tidak disarankan untuk menggunakan lebih dari tujuh elemen). Listing 6.4 memperlihatkan contoh membuat tuple dari empat elemen dengan tipe yang sama. Ini menggunakan alias dari tipe data Int, yang tidak dilarang.

Daftar 6.4

 //     Int typealias numberType = Int //       let numbersTuple: (Int, Int, numberType, numberType) = (0, 1, 2, 3) numbersTuple // (.0 0, .1 1, .2 2, .3 3) 

6.2. Interaksi dengan elemen tuple


Sebuah tuple dimaksudkan tidak hanya untuk mengatur dan menyimpan set nilai tertentu, tetapi juga untuk berinteraksi dengan nilai-nilai ini. Pada bagian ini, kita akan membahas bagaimana berinteraksi dengan nilai-nilai elemen tuple.

Inisialisasi nilai ke parameter


Anda dapat mendeklarasikan parameter baru dengan satu ekspresi dan menginisialisasi nilai semua elemen tuple di dalamnya. Untuk melakukan ini, setelah kata kunci var (atau biarkan, jika Anda mendeklarasikan konstanta) dalam tanda kurung dan koma, Anda harus menentukan nama parameter baru, dan setelah operator inisialisasi, berikan tupel. Perhatikan bahwa jumlah parameter yang dideklarasikan harus sesuai dengan jumlah elemen tuple (Listing 6.5).

Listing 6.5

 //      var (statusCode, statusText, statusConnect) = myProgramStatus //   print("  β€” \(statusCode)") print("  β€” \(statusText)") print("   β€” \(statusConnect)") 

Konsol:

   β€” 200   β€” In Work    β€” true 

Dengan menggunakan sintaks ini, Anda dapat dengan mudah menginisialisasi nilai arbitrer ke beberapa parameter sekaligus. Untuk melakukan ini, di sisi kanan ekspresi, setelah operator inisialisasi, tidak perlu melewati parameter yang berisi tuple, tetapi tuple literal (Listing 6.6).

Listing 6.6

 /*         */ var (myName, myAge) = ("", 140) //    print("  \(myName),   \(myAge) ") 

Konsol:

   ,   140  

Variabel myName dan myAge diinisialisasi dengan nilai yang sesuai dari elemen tuple (Troll, 140). Dengan menggunakan sintaks ini, Anda dapat mengabaikan elemen tuple yang berubah-ubah. Untuk melakukan ini, Anda harus menentukan karakter garis bawah sebagai nama variabel yang sesuai dengan elemen yang akan diabaikan (Listing 6.7).

Listing 6.7

 /*      */ var (statusCode, _, _) = myProgramStatus 

Akibatnya, nilai elemen pertama tuple, myProgramStatus, ditulis ke variabel statusCode. Nilai-nilai lain akan diabaikan.

CATATAN

Garis bawah dalam Swift menunjukkan mengabaikan parameter. Ini bukan satu-satunya contoh di mana ia dapat digunakan. Di masa depan, ketika mempelajari materi buku ini, Anda akan bertemu dengannya lebih dari sekali.

Akses elemen tuple melalui indeks


Setiap elemen tuple, di samping nilainya, berisi indeks integer yang dapat digunakan untuk mengakses elemen ini. Indeks selalu diatur secara berurutan, mulai dari nol. Jadi, dalam tupel elemen N, indeks elemen pertama adalah 0, dan yang terakhir dapat diakses menggunakan indeks N-1.

Saat mengakses elemen tunggal, indeks ditunjukkan melalui titik setelah nama parameter di mana tuple disimpan. Listing 6.8 menunjukkan contoh mengakses elemen individual tuple.

Listing 6.8

 //      print("   β€” \(myProgramStatus.0)") print("   β€” \(myProgramStatus.1)") print("    β€” \(myProgramStatus.2)") 

Konsol:

   β€” 200   β€” In Work    β€” true 

Akses elemen tuple melalui nama


Selain indeks, setiap elemen tuple dapat diberi nama unik. Nama elemen tidak diperlukan dan hanya digunakan untuk kenyamanan menggunakan tupel. Nama dapat diberikan kepada semua orang dan bagian elemen. Nama elemen dapat didefinisikan baik dalam tuple literal dan dengan secara eksplisit mendefinisikan tipenya.

Listing 6.9 menunjukkan contoh penentuan nama elemen tuple melalui literal.

Listing 6.9

 let statusTuple = (statusCode: 200, statusText: "In Work", statusConnect: true) 

Nama elemen yang ditentukan dapat digunakan untuk mendapatkan nilai dari elemen-elemen ini. Dalam hal ini, sintaks yang sama digunakan seperti ketika mengakses melalui indeks, ketika indeks ditentukan melalui titik setelah nama parameter. Menentukan nama tidak mencegah Anda menggunakan indeks. Indeks dalam tupel selalu dapat digunakan.

Listing 6.10 menunjukkan bagaimana nama elemen digunakan bersama dengan indeks.

Listing 6.10

 //      print("   β€” \(statusTuple.statusCode)") print("   β€” \(statusTuple.statusText)") print("    β€” \(statusTuple.2)") 

Konsol:

   β€” 200   β€” In Work    β€” true 

Akses ke elemen menggunakan nama lebih mudah dan visual daripada akses melalui indeks.
Seperti disebutkan sebelumnya, nama elemen dapat ditentukan tidak hanya dalam tuple literal, tetapi juga ketika secara eksplisit menentukan tipe data. Listing 6.11 memperlihatkan contoh yang sesuai.

Listing 6.11

 /*          */ let anotherStatusTuple: (statusCode: Int, statusText: String, statusConnect: Bool) = (200, "In Work", true) //    anotherStatusTuple.statusCode // 200 

Editing Tuple


Untuk tupel dari jenis yang sama, operasi inisialisasi nilai dari satu tuple menjadi yang lain dapat dilakukan. Perhatikan contoh pada Listing 6.12.

Listing 6.12

 var myFirstTuple: (Int, String) = (0, "0") var mySecondTuple = (100, "") //       myFirstTuple = mySecondTuple myFirstTuple // (.0 100, .1 "") 

Tupel myFirstTuple dan mySecondTuple memiliki tipe data yang sama, sehingga nilai satu dapat diinisialisasi dengan yang lain. Jenis pertama diatur secara eksplisit, dan yang kedua melalui nilai yang diinisialisasi.
Indeks dan nama dapat digunakan untuk mengubah nilai elemen individual dalam sebuah tuple (Listing 6.13).

Listing 6.13

 //   var someTuple = (200, true) //     someTuple.0 = 404 someTuple.1 = false someTuple // (.0 404, .1 false) 

Tuples sangat luas di Swift. Misalnya, dengan bantuan mereka, Anda dapat dengan mudah mengembalikan bukan hanya satu, tetapi beberapa nilai dari fungsi Anda (kami akan berkenalan dengan beberapa fungsi kemudian).

CATATAN


Tuples tidak memungkinkan Anda untuk membuat struktur data yang kompleks, satu-satunya tujuan mereka adalah untuk mengelompokkan seperangkat parameter heterogen atau serupa tertentu dan mentransfernya ke lokasi yang diinginkan. Untuk membuat struktur yang kompleks, Anda harus menggunakan alat pemrograman berorientasi objek (OOP), dan lebih khusus lagi, kelas atau struktur. Kita akan mengenal mereka nanti.

Β»Informasi lebih lanjut tentang buku ini dapat ditemukan di situs web penerbit
Β» Isi
Β» Kutipan

Diskon 25% untuk kupon untuk Swabbrookers - Swift

Setelah pembayaran versi kertas buku, sebuah buku elektronik dikirim melalui email.

Source: https://habr.com/ru/post/id469187/


All Articles