- Published on
Swift Advanced: Custom Operator (Maxsus operatorlar) yaratish
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Custom Operator nima o'zi?
Biz odatda raqamlarni qo'shish yoki bo'lish uchun matematik operatorlardan foydalanamiz:
let value = 5 + 5 // + operatori
let value2 = 10 / 2 // / operatori
Aslida, Swift'dagi ushbu operatorlar qandaydir tilning ichiga yashirilgan sehr emas, balki oddiy static funksiyalardir! Agar biz Swift'ning FloatingPoint kodiga kirsak, u yerdagi + belgisi shunday yozilganini ko'ramiz:
static func + (lhs: Self, rhs: Self) -> Self
Bu degani, biz Swift'da xuddi shunday o'zimizning operatorlarimizni ham noldan yarata olamiz!
O'zimizning operatorni yozamiz
Tasavvur qiling, ikkita sonni bir-biriga qo'shib, keyin doim uchinchi songa bo'lish amaliyoti sizga juda ko'p kerak bo'lyapti. Buning o'rniga biz shunchaki maxsus +/ (qo'shib bo'lish) operatorini yozamiz.
- Avval kompilatorga yangi operatorni tanishtirishimiz kerak. Buning uchun global maydonda (faylning eng yuqorisida) uni e'lon qilamiz:
// infix - bu operator ikkita qiymatning o'rtasida kelishini bildiradi (A +/ B)
infix operator +/
- Ana endi u operator nimani amalga oshirishini yozamiz. Biz buni
FloatingPoint(kasr sonlar, masalan Double) ga qo'shamiz:
extension FloatingPoint {
// Asosiy amal
static func +/ (lhs: Self, rhs: Self) -> Self {
// Ikkita sonni o'zaro qo'shamiz va 2 ga bo'lamiz
return (lhs + rhs) / 2
}
}
Natija:
let number: Double = 5 +/ 5
// 5 + 5 = 10, 10 / 2 = 5.0
// Natija: 5.0 chiqadi!
Ko'rib turganingizdek, biz faqatgina ramzlar orqali o'zimizga kerakli arifmetik amallarni yashirib qo'ydik.
Yana bir misol: O'zimizning "Max" operatorimiz
Aytaylik, biz ikkita sonning eng kattasini topishni istaymiz. Odatda max(a, b) yozamiz. Biz buni ^^^ operatoriga o'zgartirmoqchimiz.
infix operator ^^^
extension FloatingPoint {
static func ^^^ (lhs: Self, rhs: Self) -> Self {
return max(lhs, rhs)
}
}
// Ishlatilishi:
let kattaSon = 10.0 ^^^ 25.0
// Natija: 25.0
Xulosa
Custom (maxsus) operatorlar ajoyib tuyulsa-da, ularni haqiqiy jiddiy proyektlarda ehtiyotkorlik bilan ishlatish kerak. Sababi, jamoangizdagi boshqa dasturchilar ^^^ operatorini nima qilishini darhol tushunmasliklari mumkin. Standart funksiyalar (masalan, max()) doimo aniqroq o'qiladi.
Biroq, bu sizga Swift dasturlash tilining qanchalik kuchli va moslashuvchan ekanligini yaxshi anglatadi. Ba'zan shaxsiy yoki matematik hisob-kitoblarga asoslangan loyihalarda ular juda foydali vositaga aylanishi mumkin.