بایگانی برچسب: s

پیاده سازی لیست پیوندی در روبی

لیست پیوندی، یکی از ساختمان داده هایی هست که معمولا توی درس ساختمان داده درس داده میشه (البته در مورد کاربردش در زندگی واقعی چیزی نمیدونم، ممنون میشم بهم بگید) و خب معمولا سر کلاس، توی زبانهایی مثل C یا ++C درس میدنش. اما من داشتم توی نت میگشتم و به این مقاله رسیدم. که این مقاله، توضیح داده چطور میشه توی روبی این ساختمان داده رو پیاده کرد. خب به صورت ساده میریم سراغ پیاده سازی و کم کم پیچیدش میکنیم.

کد   
class Node
 attr_accessor :node, :next
 
 def initialize(node)
  @node = node
 end
end

خب تا اینجا، عملکرد ساده لیست پیوندی رو داریم. همون node و next که next معمولا از جنس اشاره گره. خب ما قاعدتا یک متد دیگری هم نیاز داریم. متدی که نیاز داریم، متدیه که بهمون بگه چیا توی لیستمون ذخیره کردیم. اصولا یکی از مهم ترین متد هاییه که میتونیم توی این کلاس، اضافه کنیم. متد رو به این شکل مینویسیم :

کد   
def self.node_list(node, msg = nil)
    msg ||= ""
    return msg[0..-4] if node.nil?
    node_list(node.next, msg << "#{node.node} -> ")
  end

بسیار خوب! حالا یک متدی مینویسیم که این لیست رو برای ما، برعکس کنه. گرچه چنین متدی نیاز نیست، اما چون توی روبی از این متد برای هش ها و لیست ها (آرایه ها) استفاده شده، بهتره ما هم به لینک لیستمون اضافش کنیم. خب یک متد هم به اسم Reverse ایجاد میکنیم به این شکل:

کد   
def self.reverse(node)
    return node if node.next.nil?
 
    head, swap, node.next = node.next, node, nil
    link = head.next
 
    while link != nil
      head.next = swap
      swap = head
      head = link
      link = link.next
    end
 
    head.next = swap
    head
  end

حالا میتونیم با استفاده از این کلاس، از لیست های پیوندی استفاده کنیم. البته دقت کنید که ما در اینجا در مورد حذف و اضافه کردن Node ها حرفی نزدیم. بلکه صرفا نمایش و معکوس کردن لیست رو بررسی کردیم. امیدوارم کد به کمکتون اومده باشه :).

Share

فراز هایی از زبان برنامه نویسی Ruby

دو سه تا پست اخیر، تقریباً هیچ ربطی به موضوع مرسوم و معمول وبلاگ، یعنی کامپیوتر و تکنولوژی و …، نداشتند. خب، حالا تصمیم گرفتم تا در مورد زبان مورد علاقم، یعنی روبی مطلب بنویسیم! همونطور که میدونید، قبلاً هم منابعی برای یادگیری روبی معرفی کردم. این زبان، یک زبان اسکریپتی و ساده هست، و نحو مشابه پایتون داره (از نظر من، از پایتون آسون تره، ولی خب این فقط نظر منه 🙂 ).

کاربردها

روبی، میتونه برای نوشتن برنامه های روزمره، یا نوشتن backend وبسایت ها و … استفاده بشه. همچنین، برای ایجاد و انجام پروژه های سریع  و دم دستی هم بسیار بسیار خوب عمل میکنه، به طوری که خودم شخصا خیلی از مساله های ساده برنامه نویسی رو به کمک روبی، حل میکنم. روبی، امکانات بسیار خوبی برای  کار با متون و آرایه ها داره و از این جهت به زبان پرل نزدیکه. در واقع، در متن، میخوام روبی رو به همون شکلی که خودم یاد گرفتم، باز آموزی کنم 🙂

نصب روبی

برای نصب روبی، زحمت زیادی لازم نیست، اگر کاربر اوبونتو هستید، کافیه کد زیر رو در ترمینال اجرا کنید :

sudo apt-get install ruby

خب، با استفاده از کد فوق، روبی روی سیستم شما، نصب میشه. روبی یک شل اینتراکتیو داره که میتونید در اون، به صورت Real Time نتیجه دستوراتی که مینویسید رو ببینید. شل اینتراکتیو این زبان هم از طریق دستور irb قابل دسترسیه.

مثالهای ساده متنی

همونطوری که گفتم، این زبان یکی از خوبی هاش اینه که برای کار با متن و آرایه ها، خیلی امکانات خوبی داره، به طوری که میتونه کمک خوبی باشه برای کسی که نیاز داره یک متن رو پردازش کنه! . خب، زیاد حرف زدم، الان کافیه توی ترمینال بزنید irb و این مثال ها رو اجرا کنید :

puts "Hello, World"

دستور بالا، دقیقا همون کار دستور زیر رو در زبان Go میکنه :

Println("Hello World")

خیلی خوب، یک سری مثال دیگه (با قرار دادن اسم خودم در متغیر name) :

name = "Muhammadreza"
puts name
puts name.reverse

که در خط اول، من اسم خودم رو به متغیر name نسبت دادم، در خط دوم خواستم اسمم رو چاپ کنه، و در خط سوم، اسمم رو برعکس چاپ کنه! (این برعکس چاپ کردن، میتونه خیلی وقتا، خیلی مفید باشه 🙂 ).

و مثالهای بیشتر …؟

متاسفانه، اینجا نمیتونم مثالهای بیشتری بیارم، ولی سعی میکنم بزودی هرچی از Ruby میدونم رو درون یک فایل PDF منتشر کنم تا همه کسانی که به این زبان علاقه دارند، بتونند در این زبان راه بیفتن.

موفق باشید!

Share