एक रूबी इंटरप्रेटर एक प्रोग्राम है जो रूबी कोड को पढ़ता और चलाता है।
लेकिन...
क्या आप जानते हैं कि डिफ़ॉल्ट रूबी इंटरप्रेटर (MRI) में बहुत सारे दिलचस्प और उपयोगी कमांड-लाइन विकल्प हैं?
जैसे:
ruby -v
जो आपको वर्तमान में उपयोग किए जा रहे रूबी वर्जन को देता है।
या -e फ्लैग जो आपको कोड का एक टुकड़ा सीधे चलाने की अनुमति देता है, बिना फाइल के और बिना irb में जाए।
इस तरह:
ruby -e 'puts 123'
आप इन फ्लैग्स को -h का उपयोग करके ढूंढ सकते हैं।
कुछ "छिपे हुए" फ्लैग्स हैं जिन्हें आप केवल --help से देख सकते हैं।
यहाँ एक टेबल है जो मुझे लगता है कि...
सबसे दिलचस्प फ्लैग्स:
| फ्लैग | विवरण |
|---|---|
| -v | रूबी वर्जन प्रिंट करें |
| -c | सिंटैक्स चेक |
| -e | कोड सीधे चलाएं |
| -w | चेतावनियाँ सक्षम करें |
| -r | एक फाइल / जेम की आवश्यकता है |
| -I | लोड पथ में डायरेक्टरी जोड़ें |
| --enable frozen-string-literal | सभी स्ट्रिंग्स को फ्रीज करें |
| --dump parsetree | पार्स ट्री दिखाएं |
आइए इनमें से कुछ फ्लैग्स पर ध्यान केंद्रित करें कि वे कैसे काम करते हैं!
सिंटैक्स चेक
यदि आपके पास कोड है और आप जानना चाहते हैं कि सिंटैक्स सही है या नहीं तो आप -c CLI विकल्प का उपयोग कर सकते हैं।
उदाहरण:
ruby -c code_without_syntax_errors.rb # Syntax OK ruby -c code_with_syntax_errors.rb # syntax error, unexpected tIDENTIFIER, expecting end-of-input
सरल, लेकिन यह काम करता है 🙂
क्विक रिक्वायर
कभी-कभी आप अपने फाइल के टॉप पर "require" लिखे बिना अस्थायी रूप से एक जेम को रूबी प्रोग्राम में रिक्वायर करना चाहते हैं।
जैसे एक डीबगिंग जेम।
उदाहरण:
ruby -rpry code.rb
बहुत मददगार!
वार्निंग फ्लैग
वार्निंग फ्लैग का उपयोग करने से लिंटिंग सक्षम होगी और आपको अपने कोड के साथ संभावित समस्याएं दिखाई देंगी।
उदाहरण के लिए, यह कोड:
p @test
जब आप ruby -w का उपयोग करते हैं तो निम्नलिखित चेतावनी प्रिंट करता है:
warning: instance variable @test not initialized
यह एक अच्छी चेतावनी है!
क्योंकि आप किसी इंस्टेंस वेरिएबल को पहले मान दिए बिना उपयोग करने का प्रयास कर रहे होंगे।
या इंस्टेंस वेरिएबल नाम में टाइपो हो सकता है, जिसे यह फ्लैग समस्या बनने से पहले ढूंढने में आपकी मदद कर सकता है।
फिक्स सरल है:
@test = nil
यहाँ एक और उदाहरण है:
c = 1
यह आपको देगा:
warning: assigned but unused variable - c
इस चेतावनी को ठीक करने के लिए आप या तो वेरिएबल को डिलीट कर सकते हैं या इसका उपयोग कर सकते हैं।
यह केवल लोकल वेरिएबल्स के लिए काम करता है।
लेकिन आपको पता होना चाहिए कि ब्लॉक आर्गुमेंट्स के अंदर अनुपयोगी आर्गुमेंट्स को अंडरस्कोर (_) से बदलना "बेस्ट प्रैक्टिस" माना जाता है।
उदाहरण:
{ chocolate: 82 }.map { |k, _| k }
यह रूबी में एक सामान्य कन्वेंशन है।
_ खास नहीं है, यह बस एक वैध वेरिएबल नाम होता है।
अधिक वार्निंग उदाहरण
निम्नलिखित कोड का परिणाम किसी मेथड से वापस नहीं किया जा रहा है, या किसी वेरिएबल को असाइन नहीं किया गया है।
2 * 2
रूबी आपको इस तरह अलर्ट करती है:
warning: possibly useless use of * in void context
फिक्स?
बेकार स्टेटमेंट को डिलीट करें, या इसे वेरिएबल में असाइन करें।
अब इस मेथड को देखते हैं:
def orange(weight, quantity) # ... end
orange को कॉल करने के अलग-अलग तरीके हैं:
orange 100, 2 orange(100, 2) orange *[100, 2] orange(*[100, 2])
यदि आप चेतावनियों के साथ orange *[100, 2] का उपयोग करते हैं तो आपको यह मिलता है:
warning: '*' interpreted as argument prefix
क्या हो रहा है?
अस्पष्टता।
रूबी सोचता है कि आप orange * [100, 2] का मतलब है, बजाय orange *[100, 2] के।
* और [ के बीच का स्पेस अंतर डालता है क्योंकि यह * को ऐरे (स्प्लैट ऑपरेटर) के साथ जोड़ता है अगर यह गायब है, या यह सोचता है कि * एक मेथड कॉल है अगर यह मौजूद है।
तो हाँ, इस मामले में, स्पेस मायने रखता है।
आप मेथड को अन्य तरीकों में से किसी से भी कॉल करके इस चेतावनी को ठीक कर सकते हैं।
अब:
अपने कुछ कोड को -w फ्लैग के साथ चलाएं और कुछ चेतावनियों को हटाकर इसे सुधारें 🙂
रीड-इवैल-प्रिंट-लूप
आप शायद irb और pry से परिचित हैं, वे दोनों वही हैं जिन्हें हम REPL कहते हैं।
-n फ्लैग का उपयोग -e फ्लैग के साथ संयोजित करके आप बहुत कम कोड के साथ समान प्रभाव प्राप्त कर सकते हैं।
यहाँ एक उदाहरण है:
echo 'bacon\nchocolate\norange' | ruby -ne 'puts $_.upcase' # BACON # CHOCOLATE # ORANGE
यह echo से इनपुट लेता है, फिर प्रत्येक लाइन के लिए यह आपका कोड (puts $_.upcase) कॉल करता है।
जहाँ $_ एक विशेष वेरिएबल है जिसमें gets द्वारा पढ़ा गया अंतिम इनपुट मान होता है।
फ्रोज़न स्ट्रिंग लिटरल्स फ्लैग
रूबी 2.3 ने फ्रोज़न स्ट्रिंग लिटरल्स "मैजिक कमेंट" पेश किया।
यह इस तरह दिखता है:
# frozen_string_literal: true
यह आपकी सभी स्ट्रिंग्स को फ्रीज कर देगा, जिससे वे इम्म्यूटेबल (बदली नहीं जा सकतीं) हो जाएंगी।
इसे करने का दूसरा तरीका --enable frozen-string-literal फ्लैग को रूबी में पास करना है।
यह कोड:
str = "abcdef" str[0] = "b"
जब आप उस फ्लैग का उपयोग करते हैं तो इस एरर में परिणाम होता है:
can't modify frozen String (FrozenError)
लेकिन क्या होगा यदि आपको स्ट्रिंग बदलने की आवश्यकता है?
तब आप यह कर सकते हैं:
str = "abcdef".dup
या यह:
str = +"abcdef"
दोनों आपको काम करने के लिए एक नॉन-फ्रोज़न स्ट्रिंग देते हैं।
सारांश
आपने रूबी के कमांड-लाइन विकल्पों के बारे में सीखा, जिसमें वर्जन फ्लैग, वार्निंग फ्लैग और फ्रोज़न स्ट्रिंग लिटरल्स शामिल हैं। ये सभी फ्लैग्स उपयोगी हो सकते हैं, इन्हें आज़माएं!
इस लेख को शेयर करना न भूलें ताकि अधिक लोग इससे लाभ उठा सकें।
पढ़ने के लिए धन्यवाद 🙂