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

रूबी में 9 नई सुविधाएँ 2.4

क्रिसमस पर रूबी के नए संस्करण जारी करने की परंपरा बन गई है।

और इस पोस्ट में मैं रूबी 2.4 में कुछ सबसे दिलचस्प बदलावों को कवर करना चाहता हूं ताकि आप खबरों के साथ बने रह सकें 🙂

कीवर्ड के साथ #दौर फ़्लोट करें

यदि आप अपने ऐप में फ्लोट्स का उपयोग कर रहे हैं तो मुझे आशा है कि आप floor . का उपयोग करेंगे या ceil गोलाई के लिए, क्योंकि फ़्लोट#राउंड विधि रूबी 2.4 में अपने डिफ़ॉल्ट व्यवहार को बदल रही है।

उदाहरण :

# Ruby 2.3
(2.5).round
3

# Ruby 2.4
(2.5).round
2

डिफ़ॉल्ट व्यवहार अब "राउंड-टू-निकटतम-सम" है।

<ब्लॉककोट>

अपडेट करें :Float#round . के लिए डिफ़ॉल्ट व्यवहार Ruby 2.4 . के अंतिम संस्करण में "राउंडिंग अप" पर वापस आ गया है . यह पोस्ट मूल रूप से प्रकाशित होने के बाद Matz द्वारा लिया गया निर्णय था।

इसके अलावा, Float#round अब एक तर्क लेता है जिसका उपयोग आप अपनी इच्छित गोलाई के प्रकार को परिभाषित करने के लिए कर सकते हैं।

विकल्प हैं:

  • :यहां तक ​​कि
  • :ऊपर
  • :नीचे

उदाहरण :

(4.5).round(half: :up)
5

साथ ही Float#floor , Float#ceil &Float#truncate अब एक वैकल्पिक तर्क लें जो आपको सटीक सेट करने देता है।

आईओ विधियों के लिए चॉम्प फ्लैग

यदि आपने कभी get या प्रत्येक_लाइन जैसी विधि का उपयोग किया है, तो मुझे यकीन है कि आपको उन अजीब नए लाइन वर्णों से निपटना याद होगा।

जो इस तरह दिखते हैं:\n

यह एक ऐसी चीज है जिससे शुरुआती लोगों को हमेशा परेशानी होती है, लेकिन यह नई सुविधा मदद कर सकती है!

यहां एक उदाहरण दिया गया है:

input = gets.chomp
# "abc\n"

अब रूबी 2.4 में आप chomp . सेट कर पाएंगे कीवर्ड तर्क और gets आपके लिए न्यूलाइन कैरेक्टर को हटा देगा।

उदाहरण :

input = gets(chomp: true)
# "abc"

यह किसी भी मान के साथ काम करेगा जो false नहीं है या nil (रूबी में केवल "गलत" मान)।

तो यह भी काम करता है (लेकिन अनुशंसित नहीं है क्योंकि यह भ्रमित करने वाला हो सकता है):

input = gets(chomp: 1234)
# "abc"

यह कोई बड़ी बात नहीं है, लेकिन यह आपको एक विधि कॉल

. से बचा सकता है

पथनाम#खाली?

रूबी 2.4 लागू करता है Dir#empty? &File#empty? , इन विधियों से आप जांच सकते हैं कि कोई निर्देशिका या फ़ाइल खाली है या नहीं (यह बहुत स्पष्ट था, है ना?)।

लेकिन Pathname#empty? हाल ही में जोड़ा गया था।

यदि आप Pathname . से परिचित नहीं हैं तो , यह एक ऐसा वर्ग है जो Dir . दोनों की कार्यक्षमता को एक साथ मिलाता है वर्ग और File कक्षा।

इसके अलावा, यह इस अर्थ में अधिक "OO" (ऑब्जेक्ट ओरिएंटेड) है कि यह Pathname लौटाता है स्ट्रिंग्स के बजाय ऑब्जेक्ट।

उदाहरण :

Pathname.empty?("file or directory name")

प्रतिबद्ध:https://github.com/ruby/ruby/commit/9373c5efb993dd8cae0526118805449b19af2c22

तुलना_बाई_पहचान सेट करें

सेट एक डेटा संरचना है जो मानक पुस्तकालय के हिस्से के रूप में उपलब्ध है। यह अद्वितीय वस्तुओं का संग्रह रखने में आपकी सहायता करता है।

डिफ़ॉल्ट रूप से वस्तुओं की तुलना उनके मूल्य के आधार पर की जाती है (या अधिक सटीक होने के लिए, उनके हैश मान के आधार पर)।

लेकिन रूबी 2.4 में उनके ऑब्जेक्ट आईडी के आधार पर अद्वितीय वस्तुओं का एक सेट होना संभव है।

उदाहरण :

require 'set'

# Normal set

set = Set.new

set << 123 << 123 << "abc" << "abc"
# [123, "abc"]

# Identity set

set = Set.new().compare_by_identity

set << 123 << 123 << "abc" << "abc"
# [123, "abc", "abc"]

अगर किसी को इस सुविधा के किसी दिलचस्प उपयोग के बारे में पता है तो एक टिप्पणी छोड़ दें 🙂

प्रतिबद्ध:https://github.com/ruby/ruby/commit/76977611dd68e384fdce8c546efda5e1931e67a6

कर्नेल के साथ परिशोधन#भेजें, BasicObject#भेजें , प्रतीक#to_proc

मैं यहां विस्तार से शोधन को कवर नहीं करने जा रहा हूं, लेकिन मूल विचार यह है कि String जैसी कक्षा में विधियों को जोड़ने में सक्षम होना चाहिए। , इस परिवर्तन को एक फ़ाइल या वर्ग में "स्थानीयकृत" रखते हुए।

रूबी 2.4 के बाद से, Kernel#send जैसी विधियों के माध्यम से कॉल किए जाने पर परिशोधन के माध्यम से परिभाषित विधियां उपलब्ध होंगी &Symbol#to_proc

उदाहरण :

module TenTimes
  refine String do
    def ten_times
      puts self * 10
    end
  end
end

class Thing
  using TenTimes

  "abc".send(:ten_times)
end

यदि आप इसे 2.3 या उससे कम में आजमाते हैं तो आपको 'अपरिभाषित विधि' त्रुटि मिलेगी।

प्रतिबद्ध:https://github.com/ruby/ruby/commit/35a29390197750abf97ef16fa0740e377764daef

हैश#transform_values

रेल से निकाली गई और सीधे रूबी में आने वाली एक और विधि यहां दी गई है। मैं बात कर रहा हूँ Hash#transform_values , जो Array#map . के समान कार्य करता है ।

उदाहरण :

h = {a: 1, b: 2, c: 3}

h.transform_values { |v| v * 10 }
# {a: 10, b: 20, c: 30}

Hash#transform_values! . भी है अगर आपको इन-प्लेस म्यूटेशन की जरूरत है।

Kernel#clone अब एक वैकल्पिक कीवर्ड तर्क लेता है

जैसा कि आप जानते हैं, रूबी ऑब्जेक्ट की प्रतिलिपि बनाना संभव है। यह उपयोगी है क्योंकि अधिकांश रूबी वस्तुएं परिवर्तनशील हैं और आप मूल वस्तु में परिवर्तन करने से बचना चाह सकते हैं।

ऑब्जेक्ट कॉपी बनाने के लिए हमारे पास दो तरीके हैं:

  • क्लोन
  • डुप

क्लोन और डुप के बीच कुछ छोटे अंतर हैं, लेकिन इस पोस्ट के लिए हम केवल यह कहते हैं कि clone dup . के दौरान मूल वस्तु की "जमे हुए" स्थिति को बनाए रखता है नहीं।

2.4 में नया clone को कॉल करने की क्षमता है "फ्रीज" ध्वज के साथ।

उदाहरण :

foo = "test".freeze
boo = foo.clone(freeze: false)

boo.frozen?
# false

मुझे यकीन नहीं है कि यह किस विस्तार के लिए उपयोगी है, लेकिन कौन अधिक विकल्प नहीं चाहता 🙂

कमिट करें:https://github.com/ruby/ruby/commit/320ae01c5fb091eab0926c186f304a9caeda1ace

Thread.report_on_exception

2.4 के साथ आने वाली एक अन्य विशेषता Thread.report_on_exception है। यह प्रस्तावित किया गया था क्योंकि थ्रेड अपवाद डिफ़ॉल्ट रूप से मौन होते हैं, और यह आपके कोड के साथ समस्याओं को छिपा सकता है।

डिफ़ॉल्ट मान false है , लेकिन यदि आपका ऐप थ्रेड का उपयोग कर रहा है, तो आपको रूबी 2.4 में अपग्रेड करते समय इसे सक्षम करने का प्रयास करना चाहिए।

उदाहरण :

Thread.report_on_exception = true

t1 = Thread.new do
  puts  "In new thread"
  raise "Exception from thread"
end

sleep(1)
puts "In the main thread"

यह अपवाद दिखाएगा, लेकिन यह आपके प्रोग्राम को क्रैश नहीं करेगा। विकल्प Thread.abort_on_exception है, जो हमेशा से उपलब्ध रहा है।

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

बाइंडिंग#irb

क्या आप binding.pry . का उपयोग करने के प्रशंसक हैं? डिबगिंग के लिए? खैर अब हमारे पास binding.irb भी है जो इसी तरह काम करता है।

लेकिन चूंकि यह irb है, आपको अभी भी वे सभी अच्छी चीज़ें नहीं मिलती हैं जो pry आपको देती हैं, जैसे वाक्य रचना हाइलाइटिंग।

कुछ नहीं से बेहतर अगर किसी कारण से आपके पास pry तक पहुंच नहीं है

कमिट करें:https://github.com/ruby/ruby/commit/493e48897421d176a8faf0f0820323d79ecdf94a

निष्कर्ष

रूबी के इस नए संस्करण में कई दिलचस्प विशेषताएं हैं, इसलिए उपलब्ध होने पर इसे देखना सुनिश्चित करें।

इस पोस्ट को शेयर करना न भूलें ताकि और लोग सीख सकें रूबी 2.4 में इन नई सुविधाओं के बारे में!


  1. नई SQL सर्वर 2017 सुविधाएँ

    क्या आप SQL सर्वर के अधिक आधुनिक संस्करण में अपग्रेड करने पर विचार कर रहे हैं? क्या आप SQL Server 2016 या SQL Server 2017 के बीच चयन कर रहे हैं? यदि ऐसा है, तो मेरी सलाह है कि SQL सर्वर 2017 में अपग्रेड करें जैसा कि मैंने इस पोस्ट में बताया है। SQL सर्वर तकनीक की रिलीज़ SQL व्यवस्थापकों और डेवलपर्स

  1. रूबी में 9 नई सुविधाएँ 2.6

    रूबी का एक नया संस्करण नई सुविधाओं और प्रदर्शन में सुधार के साथ आ रहा है। क्या आप परिवर्तनों के साथ बने रहना चाहेंगे? आइए एक नज़र डालते हैं! अंतहीन रेंज रूबी 2.5 और पुराने संस्करण पहले से ही अंतहीन श्रेणी के एक रूप का समर्थन करते हैं (Float::INFINITY के साथ) ), लेकिन रूबी 2.6 इसे अगले स्तर पर ले

  1. Windows 8.1 Update 1 नई सुविधाएं जोड़ें

    माइक्रोसॉफ्ट ने विंडोज 8.1 अपडेट 1 के प्रमुख अपडेट के बारे में विवरण की घोषणा की, जो 8 अप्रैल से शुरू होगा। नई सुविधाओं में एक बेहतर टास्कबार, स्मार्ट माउस ट्वीक और स्टार्ट स्क्रीन ट्वीक शामिल हैं जो माउस और कीबोर्ड उपयोगकर्ताओं पर ध्यान केंद्रित करते हैं। भाग I. Microsoft Windows 8.1 के प्रमुख अप