หลายคนลืมไปว่า Ruby สามารถทำสิ่งต่างๆ ที่ไม่ใช่เว็บแอปพลิเคชันได้ ในบทความนี้ ฉันต้องการแสดงวิธีสร้างแอปพลิเคชันบรรทัดคำสั่งเพื่อช่วยแก้ไขปัญหานั้น!
ต่อไปนี้คือแอปพลิเคชันบรรทัดคำสั่งที่คุณอาจคุ้นเคย:
psql
rails
bundler
gem
git
มีหลายวิธีในการสร้างแอปพลิเคชันบรรทัดคำสั่ง และในบทความนี้เราจะพูดถึงสามวิธี
คุณจะได้เรียนรู้เกี่ยวกับ :
- อาร์เรย์ ARGV
- ห้องสมุด OptParse
- อัญมณีแห่งธอร์
เริ่มกันเลย!
ค่าคงที่ทับทิม ARGV
แอปพลิเคชันบรรทัดคำสั่งมักมีหลายตัวเลือกหรือ 'แฟล็ก'
ตัวอย่างเช่น :
psql --help
คุณจะเข้าถึงตัวเลือกเหล่านี้ใน Ruby ได้อย่างไร
การใช้ ARGV
อาร์เรย์
หากคุณมีรหัสต่อไปนี้ในไฟล์ชื่อ argv.rb
:
p ARGV
และถ้าคุณรันโค้ดนี้โดยใช้ ruby argv.rb test abc 1 2 3
คุณจะได้รับสิ่งนี้:
["test", "abc", "1", "2", "3"]
เป็นอาร์เรย์ที่มีตัวเลือกทั้งหมด!
คุณสามารถตรวจสอบว่าตัวเลือกใดถูกส่งผ่านหรือไม่โดยใช้ตัวแยกวิเคราะห์ตัวเลือก
นี่คือตัวอย่าง :
def process_argv(option) case option when "-h" puts "This is the help menu." puts " -v Enable verbose mode" puts " -c Enable syntax highlighting" exit when "-v" @options[:verbose] = true when "-c" @options[:syntax_highlighting] = true end end @options = {} ARGV.each { |option| process_argv(option) } p @options
ถ้ารันแบบนี้ :
ruby argv.rb -v -c
คุณจะเห็น :
{:verbose=>true, :syntax_highlighting=>true}
วิธีนี้ใช้ได้กับเรื่องง่ายๆ แต่ถ้าคุณต้องการเขียนแอปพลิเคชันที่ใหญ่ขึ้น คุณอาจต้องพิจารณาวิธีแก้ปัญหาอื่นๆ
วิธีใช้ไลบรารีตัวแยกวิเคราะห์ตัวเลือก
Ruby มาพร้อมกับ OptionParser
คลาสที่คุณสามารถใช้เพื่อแยกวิเคราะห์ตัวเลือกบรรทัดคำสั่ง
นี่คือตัวอย่าง :
require 'optparse' @options = {} OptionParser.new do |opts| opts.on("-v", "--verbose", "Show extra information") do @options[:verbose] = true end opts.on("-c", "--color", "Enable syntax highlighting") do @options[:syntax_highlighting] = true end end.parse! p @options
คุณจะได้รับประโยชน์หลายประการเมื่อใช้ optparse
มากกว่าโซลูชันที่คุณกำหนดเอง
ตัวอย่างเช่น :
- คุณสามารถมี
-v
สั้น ๆ ได้ &รุ่นยาว--verbose
ของทุกธงโดยไม่ต้องทำงานพิเศษ - ทุกตัวเลือกมีคำอธิบาย ซึ่งจะเป็นส่วนหนึ่งของเมนูช่วยเหลือ
- เมนูความช่วยเหลือถูกสร้างขึ้นโดยอัตโนมัติสำหรับคุณ คุณจึงไม่ต้องอัปเดตด้วยตนเองทุกครั้งที่เพิ่มหรือลบตัวเลือก
หน้าตาเมนูเป็นแบบนี้ :
ส่วนที่ดีที่สุด?
ทั้งหมดนี้สร้างขึ้นใน Ruby ดังนั้นจึงไม่มีอะไรต้องติดตั้ง!
วิธีใช้อัญมณีของธอร์
หากคุณกำลังมองหาแนวทางที่แตกต่างในการแยกวิเคราะห์ตัวเลือกคุณควรดูที่อัญมณี Thor นี่คือสิ่งที่ Rails ใช้
ใน Rails คุณทำสิ่งต่างๆ เช่น :
rails new
rails generate
rails console
เพื่อ (บางส่วน) สร้าง rails
. ขึ้นใหม่ คำสั่งที่คุณสามารถทำสิ่งนี้:
require 'thor' class RailsCLI < Thor class_option :verbose, :type => :boolean, :aliases => "-v" desc "new DIRECTORY", "Create a new rails app" def new # ... end desc "generate THING PARAMETERS", "Generate controller / model / migration" def generate # ... end desc "console", "Start a rails console" def console # ... end end RailsCLI.start(ARGV)
เมนูช่วยเหลือมีลักษณะดังนี้ :
นี่เป็นรูปแบบที่แตกต่างกันมากเมื่อเทียบกับ OptionParser
…
…และอาจไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับแอปของคุณ หากทำสิ่งใดสิ่งหนึ่งโดยมีตัวเลือกตัวแปรไม่กี่อย่าง
แต่ถ้าคุณมีคำสั่งเช่น rails
ซึ่งใช้สำหรับภารกิจต่าง ๆ มากมาย Thor เป็นตัวเลือกที่ยอดเยี่ยม!
ห้องสมุดการอ่านทับทิม
คุณต้องการสร้างแอปพลิเคชันด้วยอินเทอร์เฟซแบบโต้ตอบเช่น pry
หรือ psql
?
ตรวจสอบ Readline
โมดูลซึ่งช่วยให้คุณทำสิ่งนี้ได้
นี่คือตัวอย่าง :
prompt = "> " while buf = Readline.readline(prompt, true) puts "Your input was: '#{buf}'" end
การดำเนินการนี้จะแจ้งให้คุณทราบ และสะท้อนกลับสิ่งที่คุณเขียนหลังจากกด Enter
คุณสามารถปิดโปรแกรมได้โดยกด CTRL+C
.
Readline จะเก็บประวัติของทุกสิ่งที่คุณพิมพ์ และจะช่วยให้คุณค้นหาประวัติของคุณโดยใช้ ctrl+r
, หรือ Readline::HISTORY.to_a
ภายในโค้ดของคุณ
ด้วย Readline
คุณยังสามารถใช้งานสิ่งต่างๆ เช่น การเติมข้อความอัตโนมัติ ดูตัวอย่างในลิงก์นี้
ชมวิดีโอการสอน
บทสรุป
แม้ว่าคุณจะเป็นคนประเภท GUI แต่แอปพลิเคชันบรรทัดคำสั่งก็มีประสิทธิภาพและสร้างความสนุกสนานได้มาก
ให้มันลอง &เริ่มสร้างของคุณเองวันนี้ 🙂