भाषा स्विफ्ट में, एक उदाहरण को शुरू करने के लिए, उस वर्ग के सभी क्षेत्रों को भरना होता है, और उसके बाद ही सुपरस्टारडम को कॉल करना होता है:
class Base {
var name: String
init(name: String) {
self.name = name
}
}
class Derived: Base {
var number: Int
init(name: String, number: Int) {
// won't compile if interchange lines
self.number = number
super.init(name)
}
}
मेरे लिए यह पीछे की ओर लगता है, क्योंकि उदाहरण self
को इसके क्षेत्रों में मान निर्दिष्ट करने से पहले बनाने की आवश्यकता होती है, और यह कोड ऐसा आभास देता है जैसे कि असाइनमेंट के बाद ही चेनिंग होती है। इसके अलावा, सुपरक्लास के पास अपने उपवर्ग की पेश की गई विशेषताओं को पढ़ने का कोई कानूनी साधन नहीं है, इसलिए इस मामले में सुरक्षा की गणना नहीं की जाती है।
इसके अलावा, कई अन्य भाषाओं, जैसे जावास्क्रिप्ट, और यहां तक कि ऑब्जेक्टिव सी, जो कि स्विफ्ट के लिए कुछ हद तक आध्यात्मिक पूर्वज है, को एक्सेस करने से पहले चैनिंग कॉल की आवश्यकता होती है self
, बाद में नहीं।
सुपरकंडक्टर को कॉल करने से पहले खेतों को परिभाषित करने की आवश्यकता के लिए इस विकल्प के पीछे क्या तर्क है?
self
।