रूबी परंपरा के अनुसार, कोर टीम ने 25 दिसंबर, 2024 को रूबी 3.4 जारी किया! अगर आप हमारी तरह रूबी से प्यार करते हैं, तो आप शायद सोच रहे होंगे कि रूबी 3.4 में क्या नया है। इस रिलीज में कोई बड़े बदलाव नहीं हैं, लेकिन आप कुछ वास्तव में अच्छी चीजों के बारे में जानना चाहेंगे।

आइए पहले कुछ भाषा परिवर्तनों में खुदाई करें।
भाषा परिवर्तन
भाषा परिवर्तन अधिकांश रूबी डेवलपर्स के लिए सबसे तुरंत प्रासंगिक परिवर्तन हैं। आइए उनमें से प्रत्येक पर एक त्वरित नज़र डालें!
फ्रोज़न स्ट्रिंग लिटरल्स
अगर आपने थोड़ी देर के लिए भी रूबी लिखी है, तो आपने शायद एक फाइल देखी होगी जो इससे शुरू होती है:
# frozen_string_literal: true
ऊपर दिया गया उदाहरण एक मैजिक कमेंट है, और इसका वास्तव में रूबी इंटरप्रेटर के लिए अर्थ है! यह कमेंट इंटरप्रेटर को इस फाइल में प्रत्येक स्ट्रिंग को ऐसे मानने के लिए कहता है जैसे कि उस पर freeze कहा गया हो। यदि आप इस मैजिक कमेंट वाली फाइल में एक स्ट्रिंग को संशोधित करने का प्रयास करते हैं, तो आपको एक रनटाइम त्रुटि मिलेगी।
रूबी 3.4 में, स्ट्रिंग्स डिफ़ॉल्ट रूप से ऐसे कार्य करेंगी जैसे वे फ्रोज़न हैं। उन्हें बदलने का प्रयास एक त्रुटि के बजाय एक डिप्रिकेशन वार्निंग का परिणाम देगा। रूबी का एक भविष्य का संस्करण डिफ़ॉल्ट फ्रोज़न स्ट्रिंग लिटरल्स को लागू करेगा यदि आप उन्हें बदलने का प्रयास करते हैं तो एक अपवाद उठाकर। यह संक्रमणकालीन अवधि रूबी डेवलपर्स को अपने ऐप्स को माइग्रेट करने का समय देगी।
डिफ़ॉल्ट ब्लॉक पैरामीटर
रूबी 3.4 छोटे कोड ब्लॉक्स को क्लीनर बनाने के लिए एक डिफ़ॉल्ट ब्लॉक पैरामीटर पेश करता है।
रूबी 2.7 से पहले, each मेथड के साथ एक सरणी के प्रत्येक तत्व को प्रिंट करना ऐसा दिखता था:
[1, 2, 3].each { |item| puts item }
रूबी 2.7 ने उन्हें नाम देने की आवश्यकता को हटाने के लिए नंबरेड पैरामीटर्स पेश किए। रूबी 2.7 के बाद, आप वही कोड इस तरह लिख सकते थे:
[1, 2, 3].each { puts _1 }
रूबी 2.7 का सुधार अधिक सीधा है लेकिन बिल्कुल स्पष्ट नहीं। यदि आप इस रूबी सिंटैक्स से अपरिचित हैं, तो आप यह समझने के लिए संघर्ष कर सकते हैं कि यहां क्या हो रहा है। रूबी 3.4 वही काम करने का एक और बेहतर तरीका पेश कर रहा है:
[1, 2, 3].each { puts it }
कीवर्ड स्प्लैटिंग nil
रूबी 3.4 से पहले के संस्करणों में, डबल स्प्लैट ऑपरेटर (**) का उपयोग nil के साथ TypeError उठाता था। यह एक तरह से समझ में आता था क्योंकि nil को अंतर्निहित रूप से हैश में परिवर्तित नहीं किया जा सकता था।
रूबी 3.4 इसमें एक सरल परिवर्तन प्रदान करता है - यह nil को अंतर्निहित रूप से हैश में परिवर्तित करता है। nil पर ** कॉल करना ** को खाली हैश पर कॉल करने जैसा होगा।
कोर क्लास अपडेट्स
कोर क्लास अपडेट्स रूबी डेवलपर्स के लिए भाषा परिवर्तनों जितने तुरंत प्रासंगिक नहीं हैं, लेकिन वे निश्चित रूप से समझने लायक हैं!
Exception#set_backtrace
रूबी इश्यू ट्रैकर पर एक फीचर अनुरोध ने इस परिवर्तन से पहले रूबी 3.4 में स्ट्रिंग्स की एक सरणी के साथ बैकट्रेस सेट करने को "हानिकारक" बताया। अपवाद ने पहले #backtrace_locations पर nil लौटाया।
रूबी 3.4 में, Exception#set_backtrace एक Thread::Backtrace::Location सरणी स्वीकार करेगा ताकि आप एक Backtrace इंस्टेंस को पुनर्निर्माण कर सकें और एक पूरी तरह से कार्यशील अपवाद प्राप्त कर सकें।
Range#size
Range#size का रूबी 3.4 में भी नया व्यवहार है। यदि वह रेंज जिस पर size कहा जा रहा है, पुनरावृति योग्य नहीं है, तो रूबी अब एक TypeError फेंकेगा। यह व्यवहार में एक छोटा सा परिवर्तन है जिसे आप केवल तभी नोटिस करेंगे यदि आप रेंज के एक छोटे उपसमूह पर size कॉल कर रहे हैं।
रूबी 3.4 में अन्य नए परिवर्तन
रूबी 3.4 में एक और छोटा परिवर्तन उन मेथड्स के लिए है जिन्हें एक ब्लॉक पास किया जाता है जिसका वे उपयोग नहीं करते। वर्बोज मोड में चलने पर, रूबी अब एक चेतावनी फेंकेगा यदि आप एक ब्लॉक को एक मेथड में पास करते हैं जो ब्लॉक का उपयोग नहीं करता।
आप यह सुनकर भी खुश हो सकते हैं कि रूबी 3.4 एक कार्यान्वयन पुनर्लेखन के कारण Array.each के प्रदर्शन में सुधार करता है!
अंत में, एक और अपडेट यह है कि त्रुटि संदेश और बैकट्रेस कैसे प्रदर्शित किए जाते हैं। रूबी अब प्रासंगिक होने पर बैकटिक्स के बजाय सिंगल कोट्स का उपयोग करेगा और एक मेथड नाम से पहले एक क्लास नाम प्रदर्शित करेगा।
रूबी 3.4 में अपग्रेड करना
अधिकांश लोगों के लिए रूबी 3.4 में अपग्रेड करना एक बड़ा काम नहीं होना चाहिए। सबसे श्रम-गहन हिस्सा उन सभी अनावश्यक फ्रोज़न स्ट्रिंग मैजिक कमेंट्स को हटाना होगा! रूबी 3.4 में नया सब कुछ का लाभ उठाने के लिए अपग्रेड करने के लिए समय निकालना लाभांश देगा, इसलिए देरी न करें!
और मत भूलें — अधिक रूबी समाचार और यहां तक कि इस तरह के ट्यूटोरियल अपने इनबॉक्स में प्राप्त करने के लिए, हनीबैजर न्यूज़लेटर के लिए साइन अप करें!