Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

Ruby में कीवर्ड आर्गुमेंट, हैश, और स्प्लैट ऑपरेटर्स में महारत हासिल करना

आपने शायद इस पैटर्न को पहले देखा है। एक मेथड के पास अपने अंतिम आर्गुमेंट के रूप में एक options हैश होता है, जिसमें अतिरिक्त पैरामीटर होते हैं:

def hello_message(name_parts = {}) first_name = name_parts.fetch(:first_name) last_name = name_parts.fetch(:last_name) "Hello, #{first_name} #{last_name}" end 

दुर्भाग्य से, आपको उन पैरामीटर्स को हैश से निकालना होगा। और इसका मतलब है कि अच्छे हिस्से तक पहुंचने से पहले बहुत सारा सेटअप करना पड़ता है।

लेकिन अगर आप इस मेथड को Ruby 2.0+ में कीवर्ड आर्गुमेंट का उपयोग करने के लिए बदलते हैं, तो आपको :first_name और :last_name को अपने हैश से निकालने की आवश्यकता नहीं होगी। रूबी आपके लिए यह करता है:

def hello_message(first_name:, last_name:) "Hello, #{first_name} #{last_name}" end 

यहां तक कि बेहतर, यदि आपका ऐप Ruby 1.9+ हैश सिंटैक्स का उपयोग करता है, तो आपके मेथड उन मेथड्स के कॉलर्स को बदले बिना कीवर्ड आर्गुमेंट का उपयोग कर सकते हैं:

def hello_message_with_an_options_hash(name_parts = {}) first_name = name_parts.fetch(:first_name) last_name = name_parts.fetch(:last_name) "Hello, #{first_name} #{last_name}" end def hello_message_with_keyword_arguments(first_name:, last_name:) "Hello, #{first_name} #{last_name}" end hello_message_with_an_options_hash(first_name: "Justin", last_name: "Weiss") hello_message_with_keyword_arguments(first_name: "Justin", last_name: "Weiss") 

देखें? वे आर्गुमेंट्स समान हैं!

कीवर्ड आर्गुमेंट सिंटैक्स को एक कदम बहुत दूर धकेलना

क्या होगा यदि आपने नहीं नई हैश सिंटैक्स पर स्विच किया है, हालांकि? आप अपने सभी कोड को परिवर्तित कर सकते हैं। लेकिन, कम से कम Ruby 2.2.1 में, पुरानी हैश सिंटैक्स कीवर्ड आर्गुमेंट के साथ ठीक काम करती है:

irb(main):007:0> hello_message_with_keyword_arguments(:first_name => "Justin", :last_name => "Weiss") => "Hello, Justin Weiss" 

अच्छा! हैश ऑब्जेक्ट पास करने के बारे में क्या, आर्गुमेंट्स के बजाय?

irb(main):008:0> options = {:first_name => "Justin", :last_name => "Weiss"} irb(main):009:0> hello_message_with_keyword_arguments(options) => "Hello, Justin Weiss" 

वाह। क्या होगा अगर हम एक हैश और कीवर्ड आर्गुमेंट्स को मिलाना चाहते हैं?

irb(main):010:0> options = {last_name: "Weiss"} irb(main):011:0> hello_message_with_keyword_arguments(first_name: "Justin", options) SyntaxError: (irb):11: syntax error, unexpected ')', expecting => from /usr/local/bin/irb:11:in `<main>' 

ठीक है। मुझे लगता है कि हमने इसे एक कदम बहुत दूर ले लिया। इसे ठीक करने के लिए, आप एक हैश बनाने के लिए Hash#merge का उपयोग कर सकते हैं जिसे आप अपने आप पास कर सकें। लेकिन एक बेहतर तरीका है।

यदि आप कीवर्ड आर्गुमेंट्स के बजाय नियमित आर्गुमेंट्स का उपयोग कर रहे थे, तो आप * का उपयोग करके एक सरणी से आर्गुमेंट्स को स्प्लैट कर सकते थे:

def generate_thumbnail(name, width, height) # ... end dimensions = [240, 320] generate_thumbnail("headshot.jpg", *dimensions) 

लेकिन क्या कीवर्ड आर्गुमेंट्स को एक आर्गुमेंट सूची में स्प्लैट करने का कोई तरीका है?

पता चला कि है: **। यहां बताया गया है कि आप उस टूटे हुए उदाहरण को ** के साथ कैसे ठीक करेंगे:

irb(main):010:0> options = {last_name: "Weiss"} irb(main):011:0> hello_message_with_keyword_arguments(first_name: "Justin", **options) => "Hello, Justin Weiss" 

और अगर आप वास्तव में पागल हैं, तो आप नियमित आर्गुमेंट्स, कीवर्ड आर्गुमेंट्स, और स्प्लैट्स को मिला सकते हैं:

def hello_message(greeting, time_of_day, first_name:, last_name:) "#{greeting} #{time_of_day}, #{first_name} #{last_name}!" end args = ["Morning"] keyword_args = {last_name: "Weiss"} hello_message("Good", *args, first_name: "Justin", **keyword_args) # => "Good Morning, Justin Weiss!" 

बेशक, यदि आप खुद को उस स्थिति में पाते हैं जहां यह आवश्यक है, तो आपने शायद बहुत पहले गलती की थी!

कीवर्ड आर्गुमेंट्स को आसान तरीके से कैप्चर करें

क्या आप जानते हैं कि आप * का उपयोग करके अपने सभी मेथड आर्गुमेंट्स को एक सरणी में कैसे बदल सकते हैं?

def argument_capturing_method(*args) args end argument_capturing_method(1, 2, 3) # => [1, 2, 3] 

यह कीवर्ड आर्गुमेंट्स के साथ भी काम करता है। वे एक हैश में परिवर्तित हो जाते हैं, और आपके args सरणी के अंतिम आर्गुमेंट के रूप में दिखाई देते हैं:

argument_capturing_method(1, 2, 3, key: "value") # => [1, 2, 3, {:key=>"value"}] 

लेकिन args.last[:key] इस तरह से पकड़े गए कीवर्ड आर्गुमेंट्स को पढ़ने का सबसे अच्छा तरीका नहीं है। इसके बजाय, आप नए ** सिंटैक्स का उपयोग करके कीवर्ड आर्गुमेंट्स को स्वयं प्राप्त कर सकते हैं:

def dual_argument_capturing_method(*args, **keyword_args) {args: args, keyword_args: keyword_args} end dual_argument_capturing_method(1, 2, 3, key: "value") # => {:args=>[1, 2, 3], :keyword_args=>{:key=>"value"}} 

इस सिंटैक्स के साथ, आप पहले नियमित आर्गुमेंट को args[0] के साथ और :key कीवर्ड आर्गुमेंट को keyword_args[:key] के साथ एक्सेस कर सकते हैं।

... बेशक, अब हम वापस ऑप्शन हैश पर हैं।

कीवर्ड आर्गुमेंट्स आपके कोड से पैरामीटर निष्कर्षण बॉयलरप्लेट के एक टन को हटाने के लिए महान हैं। और हो सकता है कि आपको उनका लाभ उठाने के लिए अपने किसी भी कोड को बदलने की आवश्यकता न हो।

लेकिन जब आप अधिक सामान्य मेथड लिखते हैं, तो कुछ नई तकनीकें हैं जिन्हें आपको कीवर्ड आर्गुमेंट्स को अच्छी तरह से संभालने के लिए सीखना होगा। आपको उन तकनीकों का बहुत बार उपयोग नहीं करना पड़ सकता है। लेकिन जब आप करते हैं, तो यह शक्ति और लचीलापन वहां होगा, आपका इंतजार कर रहा होगा।

  1. बाईबग और पाउ के साथ रेल्स में रिमोट डीबगिंग: एक चरण-दर-चरण गाइड बाईबग और पाउ के साथ रेल्स में रिमोट डीबगिंग: एक चरण-दर-चरण गाइड

    यदि आपने पहले बाईबग नहीं देखा है, तो मैं सुझाव देता हूँ कि आप इसे देखें। यह रूबी 2.x के लिए एक बेहतरीन डीबगर है। इसके लेखकों के शब्दों में: बाईबग रूबी 2 के लिए उपयोग में सरल, सुविधा संपन्न डीबगर है। यह निष्पादन नियंत्रण के लिए नए TracePoint API और कॉल स्टैक नेविगेशन के लिए नए डिबग इंस्पेक्टर API का

  1. रूबी लॉगिंग में महारत हासिल करें: Logger और Lograge के साथ विशेषज्ञ गाइड रूबी लॉगिंग में महारत हासिल करें: Logger और Lograge के साथ विशेषज्ञ गाइड

    रूबी में लॉग्स के साथ काम करना लॉगिंग उन प्राथमिक कार्यों में से एक है जिसे एक एप्लिकेशन आमतौर पर संबोधित करता है। लॉग्स का उपयोग तब किया जाता है जब आपको आवश्यकता होती है, उदाहरण के लिए, अपने ऐप्स के अंदर क्या हो रहा है, यह देखने के लिए, उनकी निगरानी करने के लिए, या कुछ विशिष्ट डेटा के लिए मेट्रिक्

  1. Vue, Vuex, और रेल्स के साथ फुल-स्टैक डेवलपमेंट में महारत: एक स्केलेबल दृष्टिकोण Vue, Vuex, और रेल्स के साथ फुल-स्टैक डेवलपमेंट में महारत: एक स्केलेबल दृष्टिकोण

    स्केलेबिलिटी को ध्यान में रखते हुए फुल-स्टैक एप्लिकेशन बनाना डराने वाला हो सकता है, खासकर जब Vue और Vuex के नवीनतम संस्करण के साथ निर्माण किया जा रहा हो, जिसमें पूर्ण टाइपस्क्रिप्ट समर्थन है। यह लेख अपने पाठकों को Vuex 4.0 के साथ स्टेट मैनेजमेंट से लेकर API अनुरोधों और डेटाबेस इंटरैक्शन को संभालने त