स्केल जैसे प्रोग्रामिंग भाषा में अपरिवर्तनीयता पर जोर देने के साथ ("var" से बचें), इसका मतलब है कि मेरे ऑब्जेक्ट में "राज्य-संशोधित विधियों" को उदाहरण की एक प्रति वापस करनी होगी (साथ नया राज्य)?अपरिवर्तनीयता (स्कैला में)
चलो कछुए पर विचार करें। मैं इस तरह मेरे कछुआ स्थानांतरित करना चाहते हैं:
val turtle = new Turtle(0, 0, "north")
val turtle2 = turtle.turnLeft().forward(5).turnRight().backward(2)
यहाँ turtle2 कछुए का एक ही उदाहरण (वे दो अलग अलग उदाहरणों रहे हैं) को इंगित नहीं होता। वास्तव में, आंदोलनों के उस अनुक्रम में 4 अंतरिम वस्तुओं का निर्माण किया गया था। यह मैं कैसे विधि turnLeft लागू करेगा, उदाहरण के लिए है:
def turnLeft {
self.copy(orientation = self.orientation match {
case "north" => "west"
case "east" => "north"
case "south" => "east"
case "west" => "south"
})
}
कि एक सही डिजाइन दृष्टिकोण है?
यदि हां, तो कितना कुशल/अक्षम है (प्रत्येक विधि कॉल पर नई वस्तु का निर्माण)? यदि नहीं, तो सही क्या होगा? अपरिवर्तनीय पहलू (या शायद सामान्य रूप से कार्यात्मक प्रोग्रामिंग) की मेरी समझ में गलत/गायब क्या है?
अग्रिम धन्यवाद, राका
मुझे लगता है कि आपका कोड सही दिखता है (एक अपरिवर्तनीय पीओवी से)। दक्षता के मामले में मुझे लगता है कि यह निश्चित रूप से एक एकल परिवर्तनीय पूर्व आवंटित वस्तु के रूप में तेज़ नहीं होगा। समग्र प्रभाव इस बात पर निर्भर करेगा कि आप कछुए को कितनी तेजी से और बार ले जाना चाहते हैं। –
धन्यवाद, यह ध्यान देगा। –