2013-07-01 8 views
10

मैं अभी भी perl सीख रहा हूँ।क्या मुझे पर्ल में हैश या हैशफ पसंद करना चाहिए?

मेरे लिए यह सीधे उन्हें एक्सेस करने के बजाय हैश के संदर्भों के लिए अधिक "प्राकृतिक" लगता है, क्योंकि उप के संदर्भों को पार करना आसान है, (एक चर के बजाय एक चर पारित किया जा सकता है)। जहां एक सीधे %hashes तक पहुँचता है "आम तौर पर मुझे लगता है कि इस दृष्टिकोण पसंद करते हैं।

सवाल,

$hash{key} = $value; 
बजाय

$href->{key} = $value 
है जहां सादे% हैश का उपयोग करने के लिए बेहतर है (क्या स्थितियों में), इसलिए

क्या कोई गति है, या कोई अन्य "चीज़" %hashes और $hashrefs? का उपयोग करना पसंद नहीं करती है या यह केवल शुद्ध व्यक्तिगत स्वाद और टिमटोटीडीआई का मामला है? कुछ उदाहरण, %hash का उपयोग करने के लिए बेहतर है?

+4

किसी भी जटिलता के एक कार्यक्रम में आप इन चीजों को सबराउटिन या विधियों के पास पास करना चाहेंगे, जिस बिंदु पर आप उन्हें संदर्भों में परिवर्तित कर देंगे। मैं आमतौर पर हैशफ्स का उपयोग करता हूं जब तक कि यह एक फेंकने वाली एक-एक स्क्रिप्ट नहीं है। –

+0

फिर से खोलने के लिए मतदान ... यह निश्चित रूप से एक प्रश्न है जिसका उत्तरदायी उत्तर दिया गया है – Zaid

उत्तर

9

मुझे लगता है कि इस तरह का सवाल बहुत वैध है: प्रोग्रामिंग भाषाएं जैसे कि पर्ल या सी ++ बहुत लंबा सफर तय कर चुके हैं और बहुत सारे ऐतिहासिक सामान जमा कर चुके हैं, लेकिन लोग आम तौर पर उन्हें अस्थिर, तुल्यकालिक एक्सपोज़ से सीखते हैं। इसलिए वे सोचते रहते हैं कि टिमटोडी और डब्ल्यूटीएफ इन सभी विकल्पों और बेहतर क्या है और क्या पसंद किया जाना चाहिए?

तो, संस्करण 5 से पहले, पर्ल में संदर्भ नहीं थे। यह केवल मूल्य प्रकार था। सन्दर्भ पर्ल 4 पर ऐड-ऑन हैं, जो बहुत अधिक सामान लिखने में सक्षम हैं। पिछड़े संगतता को बनाए रखने के लिए मूल्य प्रकारों को बनाए रखा जाना चाहिए; और, सादगी के लिए भी, क्योंकि अक्सर आपको संकेतों की आवश्यकता नहीं होती है कि संदर्भ हैं।

समय पर्ल हैश सूचियों की गति के बारे में सोच को व्यर्थ न गवाएं:

आपके प्रश्न का उत्तर करने के लिए। वे तेज़ हैं वे स्मृति पहुंच हैं। डेटाबेस या फाइल सिस्टम या नेट तक पहुंचना, वह जगह है जहां आपका प्रोग्राम आम तौर पर समय व्यतीत करेगा।

सिद्धांत रूप में, एक अपरिवर्तनीय संचालन को थोड़ा सा समय लेना चाहिए, इसलिए छोटे से कोई फर्क नहीं पड़ता।

यदि आप उत्सुक हैं, तो benchmark। आप जो अंतर देख सकते हैं उससे बहुत अधिक निष्कर्ष निकालें मत। चीजें एक और रिलीज पर अलग दिख सकती हैं।

तो मूल्य प्रकारों या इसके विपरीत संदर्भों का पक्ष लेने का कोई गति कारण नहीं है।

क्या कोई अन्य कारण है? मैं कहूंगा कि यह शैली और स्वाद का सवाल है। निजी तौर पर, मैं -> एक्सेसर्स के बिना वाक्यविन्यास पसंद करता हूं।

5

यदि आप अपने डेटा का वर्णन करने के लिए सादे हैंश का उपयोग कर सकते हैं, तो आप एक सादा हैश का उपयोग करते हैं। हालांकि, जब आपकी डेटा संरचना थोड़ा अधिक जटिल हो जाती है, तो आपको संदर्भों का उपयोग करने की आवश्यकता होगी।

एक प्रोग्राम की कल्पना करें जहां मैं सूची आइटम के बारे में जानकारी संग्रहीत कर रहा हूं, और मेरे पास कितने स्टॉक हैं। एक साधारण हैश काफी अच्छी तरह से काम करता है:

$item{XP232} = 324; 
$item{BV348} = 145; 
$item{ZZ310} = 485; 

सब आप कर रहे हैं त्वरित कार्यक्रमों है कि एक फ़ाइल को पढ़ने और एक रिपोर्ट के लिए सरल जानकारी स्टोर कर सकते हैं बनाने है, तो सभी को एक संदर्भ का उपयोग करने की आवश्यकता नहीं।

हालांकि, जब चीजें अधिक जटिल होती हैं, तो आपको संदर्भों की आवश्यकता होती है।उदाहरण के लिए, मेरा प्रोग्राम सिर्फ मेरे स्टॉक को ट्रैक नहीं कर रहा है, मैं अपनी सूची के सभी पहलुओं को ट्रैक कर रहा हूं। सूची वस्तुओं में नाम भी हैं, जो कंपनी उन्हें बनाती है, आदि। इस मामले में, मैं अपने हैंश को एक डेटा पॉइंट (स्टॉक में मौजूद वस्तुओं की संख्या) को इंगित नहीं करना चाहता हूं, लेकिन हैश का संदर्भ :

$item{XP232}->{DESCRIPTION} = "Blue Widget"; 
$item{XP232}->{IN_STOCK}  = 324; 
$item{XP232}->{MANUFACTURER} = "The Great American Widget Company"; 

$item{BV348}->{DESCRIPTION} = "A Small Purple Whatzit"; 
$item{BV348}->{IN_STOCK}  = 145; 
$item{BV348}->{MANUFACTURER} = "Acme Whatzit Company"; 

आप कुछ इस तरह (जैसे प्रत्येक क्षेत्र के लिए अलग से हैश है या एक ही मूल्य कोलन से अलग में सभी क्षेत्रों डाल), लेकिन यह केवल करने के लिए संदर्भ का उपयोग करना आसान है करने के लिए निराला चीजों के सभी प्रकार के कर सकते हैं इन जटिल संरचनाओं को स्टोर करें।

+0

आपको पता है कि आप '->' को हटा सकते हैं? जैसा कि: '$ आइटम {XP232} {विवरण}' – shawnhcorey

2

मुझे मुख्य कारण का उपयोग करने के $hashrefs%hashes करने के लिए उन्हें सार्थक नाम देने के लिए की क्षमता है के लिए जो मदद कर सकते हैं कार्यक्रम तर्क से डेटा संरचनाओं को अलग करने और चीजों को आसान बनाने (एक संबंधित विचार एक गुमनाम हैश के लिए संदर्भ नाम जाएगा) पढ़ने और बनाए रखने के लिए।

यदि आप संदर्भ के कई स्तरों (रेफरी के लिए refs ?!) के साथ समाप्त होते हैं, तो आप इस स्वच्छ और पठनीय लाभ को खोना शुरू करते हैं। साथ ही, छोटे कार्यक्रमों या मॉड्यूल के लिए, या विकास के शुरुआती चरणों में जहां आप चीजों को दोबारा रेट कर रहे हैं, सीधे %hash तक पहुंचने से सरल डिबगिंग (print कथन और इसी तरह) के लिए चीजों को आसान बना दिया जा सकता है और आकस्मिक "दूरी पर कार्रवाई" "मुद्दों पर आप उचित रूप से संदर्भों का उपयोग करके, अपने डिजाइन के माध्यम से" पुनरावृत्त "पर ध्यान केंद्रित कर सकते हैं।

सामान्य तौर पर मुझे लगता है कि यह एक अच्छा सवाल है क्योंकि TIMTOWDI और TIMTOCWDI जहां C = "सही" है। इसे पूछने के लिए धन्यवाद और उत्तर के लिए धन्यवाद।

संबंधित मुद्दे

 संबंधित मुद्दे