मैं Functional Programming in Swift पुस्तक के माध्यम से काम कर रहा हूं, और मेरे पास विकल्प अध्याय में पेश की गई अवधारणा में अंतर को समझने का वास्तव में अच्छा तरीका नहीं है।स्विफ्ट फ़ंक्शनल प्रोग्रामिंग - "वैकल्पिक बाइंड" बनाम "वैकल्पिक मानचित्र"
पैटर्न जब optionals के साथ काम हो जाता है:
if let thing = optionalThing {
return doThing(thing)
}
else {
return nil
}
यह मुहावरा मानक पुस्तकालय समारोह map
map(optionalThing) { thing in doThing(thing) }
किताब तो पर जारी है और वैकल्पिक की अवधारणा का परिचय के साथ संक्षेप नियंत्रित किया जाता है बाध्यकारी, जहां वह अंतर करने की मेरी क्षमता टूटने लगती है।
पुस्तक हमें गाइड map
समारोह को परिभाषित करने के:
func map<T, U>(optional: T?, f: T -> U) -> U?
{
if let x = optional {
return f(x)
}
else {
return nil
}
}
और यह भी हमें गाइड एक वैकल्पिक बाध्यकारी समारोह को परिभाषित करने के। नोट: पुस्तक ऑपरेटर >>=
का उपयोग करती है, लेकिन मैंने नामित फ़ंक्शन का उपयोग करना चुना है क्योंकि इससे मुझे समानताएं देखने में मदद मिलती है।
func optionalBind<T, U>(optional: T?, f: T -> U?) -> U?
{
if let x = optional {
return f(x)
}
else {
return nil
}
}
इन दोनों विधियों के लिए कार्यान्वयन मेरे जैसा दिखता है। दोनों के बीच फर्क सिर्फ इतना समारोह तर्क वे ले रहा है:
map
एक समारोह है कि एक यूoptionalBind
में एक टी बदल लेता है एक समारोह है कि एक वैकल्पिक यू
func addOptionalsBind(optionalX: Int?, optionalY: Int?) -> Int?
{
return optionalBind(optionalX) { x in
optionalBind(optionalY) { y in
x + y
}
}
}
func addOptionalsMap(optionalX: Int?, optionalY: Int?) -> Int?
{
return map(optionalX) { x in
map(optionalY) { y in
x + y
}
}
}
-
:
addOptionalsBind
फ़ंक्शन ठीक वही करता है जो आप करना चाहते हैं।addOptionalsMap
समारोह बताते हुए संकलित करने के लिए विफल रहता है:'इंट ??' परिवर्तनीय नहीं है 'Int?'
"घोंसले" इन फ़ंक्शन कॉल का परिणाम मेरे मस्तिष्क दर्द होता है