ईमानदारी से, मुझे यकीन नहीं है कि पर्ल के कच्चे ओओ प्राइमेटिव का कितना मूल्यवान ज्ञान अब नए कोड लिखने के लिए है। मैंने अपने कोड में बहुत लंबे समय तक @ISA या "आधार का उपयोग" या "आशीर्वाद" का उपयोग नहीं किया है; कोई भी ओओ मैं मूस एमओपी के माध्यम से करता हूं। (मैं निश्चित रूप से विद्रोही उदाहरण करता हूं, लेकिन मैं सिर्फ "आशीर्वाद" के बजाय $ मेटा-> rebless_instance का उपयोग करता हूं। बहुत साफ करने वाला!)
वैसे भी, मैं स्वयं को मूस को पहले सिखाऊंगा। शुरू करना आसान है और तुरंत उत्पादक बनना आसान है, और आप विवरण चुन सकते हैं क्योंकि आप पर्ल और प्रोग्रामिंग में अधिक कुशल बन जाते हैं।
एक उदाहरण के रूप:
#!/usr/bin/env perl
use strict;
use warnings;
use feature ':5.10'; # for 'say'
use MooseX::Declare;
class Point {
has [qw/x y/] => (is => 'ro', isa => 'Num', required => 1);
method new_from_ordered_pair(ClassName $class: Num $x, Num $y){
return $class->new(x => $x, y => $y);
}
method distance(Point $a: Point $b){
return sqrt(($a->x - $b->x)**2 + ($a->y - $b->y)**2);
}
}
my $origin = Point->new_from_ordered_pair(0,0);
my $point = Point->new_from_ordered_pair(3,4);
say '(3,4) is '. $point->distance($origin). ' units away from the origin.';
सूचना कैसे वहाँ पर्ल के कार्यान्वयन के विवरण के साथ कोई और अधिक लड़ाई है। पर्ल में ओओ करने के तरीके के बजाय आप आसानी से अपने कार्यक्रम के ब्योरे के बारे में चिंता कर सकते हैं। आपको "प्वाइंट.pm" फ़ाइल भी नहीं बनाना है, आपके पास कक्षा परिभाषा इनलाइन हो सकती है।
मुझे यह भी लगता है कि यह कोड लगभग किसी भी प्रोग्रामर के लिए तुरंत समझा जा सकता है - यहां तक कि पर्ल या मूस (या मूसएक्स :: घोषणा) के विवरण से परिचित नहीं हैं।
(बीटीडब्लू, इस उदाहरण ने विधि हस्ताक्षर में वाक्यविन्यास के साथ थोड़ा विचित्र रूप से काम किया। आम तौर पर, आपको पहले तर्क के रूप में स्वयं को $ स्वयं कहा जाता है। अगर आप पहले कुछ और आपूर्ति करते हैं: हस्ताक्षर, आप चर के प्रकार और नाम को बदल सकते हैं। मैंने "new_from_ordered_pair" भी लिखा है ताकि आपको हर बार नए तर्कों के रूप में x => $x, y => $y
टाइप करना पड़े। यह केवल चीनी है जो मुझे लगता है कि अच्छा है; कुछ भी जादुई नहीं यहाँ हो रहा है।)
अंत में, आपको "मुफ्त में" बहुत कुछ मिलता है। इन प्रयास करें, और उपयोगी त्रुटि संदेश पर ध्यान दें:
Point->new; # x is required
Point->new_from_ordered_pair('foo', 'bar'); # x needs to be a number
$point->distance('some string'); # $b needs to be a Point
आप मुक्त करने के लिए यह सब मिलता है, और यह अपने कार्यक्रम आसान डिबगिंग बनाता है। इससे बचने का कोई कारण नहीं है, यह वास्तव में प्रोग्रामिंग को और अधिक सुखद बनाता है (और यह आपके प्रोग्राम को अधिक विश्वसनीय बनाता है ... मुफ्त में!)
ओह, एक और बात। मूस के साथ, आप अपनी कक्षाओं का आत्मनिरीक्षण कर सकते हैं। यह तुरंत महत्वपूर्ण नहीं हो सकता है, लेकिन यह अच्छा हो सकता है। ओपन Devel :: आरईपीएल, प्रकार प्वाइंट वर्ग लोड करने के लिए ' "test.pl" कर', और फिर कुछ ऐसा कहना:
map { $_->name } Point->meta->get_all_attributes;
परिणाम ['x', 'y']
है। स्रोत कोड के बिना, आप यह पता लगा सकते हैं कि कक्षा में क्या विशेषताएं हैं। "सादे" पर्ल ओओ के साथ ऐसा करने का प्रयास करें। (बात इस तरह की क्या अमीर MooseX :: नाम स्थान संभव बनाता है। आप आत्मनिरीक्षण की जरूरत नहीं है, लेकिन आप CPAN से विश्वसनीय मॉड्यूल उपयोग करने की क्षमता मज़ा आएगा।)
"Moose-Unsweetened" से ऊपर का लिंक मेरे लिए काम नहीं करता था। लेकिन http://search.cpan.org/search?query=Moose%3A%3AUnsweetened&mode=all मिला मॉड्यूल – lexu
लिंक को ठीक किया गया, धन्यवाद – perigrin
मुझे लगता है कि आपका मतलब है "मूस का उपयोग न करने का कोई कारण नहीं है" उस अनुच्छेद में अगली वाक्य। – mmrobins