آموزش زبان اسکریپتی روبی
#1
Note 
سلام دوستان

تو این تاپیک قصد داریم با هم یکم روبی کار کنیم! اگر مطلب آموزشی درباره این زبان دارید میتونید تو همین تاپیک پست بزنید لطفا اگه کسی میخواد این آموزش رو کپی کنه منبع رو هم ذکر کنه
موفق باشید :winksmiley02:

خب اول باید بدونیم روبی(ruby) چیه؟

روبی (به انگلیسی: Ruby تلفظ کن!) یک زبان برنامه نویسی انعطافپذیر ،پویا و شی گرا است. روبی سینتکس(تلفظ کن!) پرل و شی گرایی اسمال تاک را ترکیب میکند و در برخی امکانات با پایفان(python تلفظ کن!) و لیسپ و Dylan و CLU مشترک است. روبی یک زبان مفسر single-pass است. پیاده سازی اصلی آن یک نرم افزار آزاد منتشر شده تحت یک مجوز بازمتن است.

تاریخچه:

این زبان توسط یوکیهیرو ماتز ماتسوموتو ایجاد شد که کار بر روی روبی را در 24 فوریه سال 1994 آغاز کرد و در سال 1995 آنرا بصورت عمومی منتشر کرد. روبی نام جواهر منتسب به ماه جولای است که ماه تاسیس یک کالج است. در اکتبر 2006 آخرین نسخه پایدار 1.8.5 است. روبی نسخه 1.9 (با یکسری تغییرات اساسی) نیز در حال توسعه است. در حال حاضر موج بحرانی در جامعه روبی بوجود آمده که دلیل آن وجود چند مشکل در پیاده سازی فعلی روبی است که راه حل مشخصی برای آنها مدنظر نیست. تیم اصلی توسعه روبی تلاشهای خود را بر روی پروژه YARV متمرکز کرده اند، اما پیشرفت آن کند است. در این اثنا چند پیاده سازی رقیب از روبی بوجود آمده اند، بخصوص جی روبی (به انگلیسی JRuby) که یک تلاش برای اتصال روبی به پلتفرم جاوا است و رابینیوس (به انگلیسی Rabinius) که یک مفسر است که بعنوان یک زیر پروژه توسط ایوان فونیکس (Evan Phoenix) ایجاد شده توجه زیادی را در هفته های اخیر به خود جلب کرده است. با عرضه نسخه 2.0 روبی و YARV در آینده باید دید که چه سرنوشت در انتظار روبی است.


سینتکس(syntax)

سینتکس روبی بسیار شبیه سینتکس پرل(perl) و پایفان است. اعلان کلاسها و متدها توسط کلمات کلیدی انجام میشود. در مقایسه با پرل متغیرها الزاما با یک علامت خاص شروع نمیشوند. (وقتی از چنین علائمی استفاده شود علامت حوزه دید متغیر را تغییر میدهد.) بارزترین تفاوت روبی از سی و پرل آنست که کلمات کلیدی (بجای براکت) برای تعریف بلوکهای کد استفاده میشوند. سطر جدید بعنوان پایان یک جمله بکار برده میشود در عین حال که برای اینکار میتوان از یک سمی کالون (Wink نیز استفاده کرد. تورفتگیها معنی خاصی ندارند (برعکس پایفان). نمونه هایی از سینتکس روبی را میتوانید در بخش مثالها ببینید.



برای اجرای سورس های روبی شما اول باید این برنامه رو نصب کنید
لینک دانلود:
کد:
http://rubyforge.org/frs/?group_id=167

فرمت سورس های نوشته شده به زبان روبی پسوند rb. دارن پس همه کد ها رو باید بصورت filename.rb ذخیره و اجرا کنید.

نحوه اجرای کدهای روبی:
بعد از نصب برنامه شما باید کد های خودتون رو برای اجرا تو پوشه bin کپی کنید و بعد با تایپ دستور
کد:
F:\ruby-193\bin>ruby SA.rb
در Command prompt ویندوز اون رو اجرا کنید

*توجه:
- بجای F:\ruby-193\bin باید ادرس پوشه bin رو بنویسید
- برای اجرای Commad prompt ویندوز باید دستور cmd رو توی پنجره RUN تایپ کنید
- عبارت ruby حتما باید قبل از نام فایل ذکر بشه
- برای راحتی کار میتونید cmd.exe رو تو پوشه bin کپی کنید این کار باعث میشه تا مجبور نباشید برای هر اجرا ادرس پوشه bin رو تایپ کنید (cmd.exe تو این ادرس هست: c:\windows\system32\cmd.exe)

اولین تمرین:
برای شروع این کد رو در یک ویرایشگر متن ساده مثل notepad کپی و با فرمت SA.rb توی پوشه bin ذخیره کنید
کد:
puts "Ruby on rails"

[ATTACH=CONFIG]298[/ATTACH]

حالا به روشی که گفته شد اون رو اجرا کنید اگر درست انجام داده باید شما باید پیام Ruby on rails رو ببینید

[تصویر:  299d1348575573-cmd.jpg]

ادامه دارد... :happysmiley:

پاسخ
#2
Note 
سلام
تو این پست میخوام در مورد وردی و خروجی ها در روبی بحث کنیم

خروجی در روبی( Output in Ruby):
برای نمایش رشته ها در روبی ما از سه متد استفاده میکنیم:

puts: این متد رشته رو چاپ کرده و به لاین بعدی میره (carriage return)
print: دقیقا کار puts رو انجام میده اما بعد از اتمام دستور به لاین بعدی نمیره (without the carriage return)
printf: این متد هم همونیه که تو زبان C و جاوا استفاده میشه.

مثال هایی از این متدها:
کد:
puts "puts works"
puts " with line breaks."

نتیجه:
کد:
puts works
with line breaks.

کد:
print "print works"
print " with no line breaks."

نتیجه:
کد:
print works with no line breaks.

کد:
printf("\n\nprintf formats numbers like %7.2f, and
strings like %s.",3.14156,"me")

نتیجه:
کد:
printf formats numbers like    3.14, and strings like
me.

* توجه: عبارت n\ در اینجا هم مثل خیلی از زبان های برنامه نویسی به معنای رفتن به خط یا لاین بعدیه
مثال:
کد:
ruby> puts "a\nb\nc"
نتیجه:
کد:
a
b
c


ورودی ها در روبی(input in ruby):

برای ورودی هم میتونیم از دستور STDIN.gets استفاده کنیم
با یه مثال ساده میشه بهترین توضیح رو داد:
کد:
puts "What is your name?"
$name = STDIN.gets
puts "Hello "+$name
این کد ها هم کار مشابهی رو انجام میدن:
کد:
print("What is your name?\n");
STDOUT.flush
$name = gets
print("Hello "+$name)

کد:
print("What is your name?\n");
STDOUT.flush
$name = gets
print("Hello #{$name}")

* نکته:
- اگر بخواید داخل دو دابل کوتیشن (") از متغیر یا عملگرها استفاده کنید باید اون رو {}# بذارید. یه مثال دیگه:
کد:
puts "5*10= #{5*10}"

- گذاشتن $ قبل ار نام متغیر به معنای تعریف یک متغیر سراسریه

چند مثال دیگه برای یادگیری بهتر:
کد:
ruby> puts "a\nb\nc"
a
b
c
   nil
ruby> puts 'a\nb\n'
a\nb\nc
   nil
ruby> "\n"
   "\n"
ruby> '\n'
   "\\n"
ruby> "\001"
   "\001"
ruby> '\001'
   "\\001"
ruby> "abcd #{5*3} efg"
   "abcd 15 efg"
ruby> var = " abc "
   " abc "
ruby> "1234#{var}5678"
   "1234 abc 5678"

کد:
ruby> "soft" + "Afzar"
   "softAfzar"

ruby> "Soft" * 2
   "SoftSoft"

ruby> word = "fo" + "o"
   "foo"
با گذاشتن این مثال ها نحوه تعریف و استفاده از اون رو هم یاد گرفتیم
امیدوارم بدردتون خورده باشه

ادامه دارد... :happysmiley:

پاسخ
#3
Note 
سلام دوستان



برای شروع تعریف یک متد ما از واژه 'def' (مخفف define) و برای معین کردن پایان تابع از 'end' استفاده میکنیم

مثال:
کد php:
def welcome(name)
   
puts "Hello #{name}"   # inside double quotes, #{ } will evaluate the variable
end 

فراخوانی تابع:
کد:
welcome("nana")

خروجی:
کد:
Hello nana

توضیح:
در کد بالا ما یک تابع با نام welcome و یک پارامتر با نام name ایجاد کردیم
در لاین بعدی از دستور puts برای نمایش یک پیام استفاده کردیم که کلمه Hello همیشگی و name متغیر خواهد بود یعنی بستگی داره چه آرگومانی ارسال بشه
وقتی که ما تابع رو با آرگومان 'nana' صدا بزنیم این کلمه تو پارامتر name قرار میگیره پس خروجی ما میشه Hello nana

*فلش بک:
یادتون باشه که برای استفاده پارامتر در دو دابل کوتیشن("") باید اون رو داخل #{name} بذارید.

*نکته:
-در اینجا برای فراخوانی تابع نیازی نیست که حتما آرگومان ما داخل پرانتز باشه
مثال:
کد php:
def welcome(name)
   
puts "Hello #{name}"   # inside double quotes, #{ } will evaluate the variable
end
welcome 
"visitor"         #look, ma, no parentheses 

خروجی:

کد:
Hello visitor

-همیشه باید کد تابع بالاتر از کد فراخوانی تابع باشه در غیر این صورت تابع رو نمیشناسه

مثال:
کد php:
welcome("nana"# call func

def welcome(name)
   
puts "Hello #{name}"   # inside double quotes, #{ } will evaluate the variable
end 

نتیجه:
کد:
sa.rb:15:in `<main>': undefined method `welcome' for main:Object (NoMethodError)



توابعی که مقداری رو برگشت میدن:

کد php:
def multiply(a,b)
  
product b
  
return product
end 

فراخوانی تابع:
کد:
puts multiply(2,3)

نتیجه:
کد:
6
اینجا هم دقیقا مثل بالاست با این تفاوت که اینجا ما دو پارامتر داریم که تابع ما باید دو عدد رو دریافت کنه و اونها رو در هم ضرب کرده در نهایت return کنه

حالا همین یکم کاربر پسند تر درست کنیم:
میخوایم کاری کنیم که عدد ها رو کاربر وارد کنه

مثال:
کد php:
def multiply(c,d)
  
product d
  
return product
end
puts 
"enter first number:\n"
a=STDIN.gets
puts 
"enter second number:\n"
b=STDIN.gets
a
=a.to_i #Convert a from string to integer
b=b.to_i #Convert b from string to integer
puts "result is: #{multiply(a,b)}" 

نکته:
برای تبدیل string به integer از to_i. استفاده میکنیم
برای تبدیل string به floating number از to_f. استفاده میکنیم
برای تبدیل float یا integer به srting از to_s. استفاده میکنیم


پارامترهای اختیاری در روبی
روبی زبان بسیار قدرتمند و انعطاف پذیریه شما در روبی میتونید مثلا یک عمل جمع رو تو پارامتر انجام بدید یا به پارامتر ها مقدار پیشفرض بدید!

به مثال توجه کنید:
کد php:
def test(a=1,b=2,c=a+b)
  
puts "#{a},#{b},#{c}"
end 

فراخوانی:
کد php:
test
test 5
test 4
6
test 3
4

نتیجه:
کد:
1,2,3
5,2,7
4,6,10
3,4,6

در فراخوانی اول ما هیچ آرگومانی به تابع ارسال نمیکنیم پس از مقادیر پیشفرض استفاده میشه یهنی 2+1 میشه و نتیج هرو نمایش میده
اما در خواخوانی های بعد ما عدد های پیشفرض رو تغییر میدیم مثلا در فرخوانی دوم (5 test) عدد 5 به جای 1 گذاشته میشه و بقیه تغییری نمیکنن پس 2+5 میشه و نتیجه نمایش داده میشه

توابعی که چند مقدار رو برگشت میدن:

مثال:
کد php:
def getCostAndMpg
    cost 
30000  # some fancy db calls go here
    
mpg 30
    
return cost,mpg
end
AltimaCost
AltimaMpg getCostAndMpg
puts 
"AltimaCost = #{AltimaCost}, AltimaMpg = #{AltimaMpg}" 

ساده بود نه؟ Confusedmilingsmiley:

ادامه دارد...

پاسخ
#4
Note 
سلام دوستان
ببخشید که این تاپیک دیر به دیر آپدیت میشه درگیر درس و مشق و دانشگاهیم :yeah:
__________

خب تو این پست میخواییم در مورد قوانین نام گذاری متغیرها در زبان شیرین روبی بحث کنیم

برای نام گذاری متغیرها باید به این نکات توجه کنید:

1- متغیرهای سراسری با عبارت '$' شروع میشوند.

2- متغیرهای کلاس با عبارت '@@' شروع میشوند.

3- متغیرهای نمونه با عبارت '@' شروع میشوند.

4- نام کلاس ها، نام ماژول ها و ثابت ها با حرف بزرگ شروع میشود.

5- نام متغیرهای محلی، متدها و پارامترهای آن با حرف کوچک شروع میشود.

6- نام یک متغییر میتواند متشکل از حروف، شماره ها و آندر اسکور( _ ) باشد


موارد جالب در مورد روبی:

1- # برای کامنت گذاری در روبی استفاده میشه اما استفاده اون توی quotes( ' ) معنی دیگه ای داره.

2- برای پایان یک خط کد نیازی به سمی کالن ( ; ) نیست، کاربرد آن برای جدا کردن دو کد در یک خط است
کد:
f="Soft"
s="Afzar";puts ("#{f}#{s}")

3- گذاشتن بک اسلش(\) در انتهای لاین به معنی ادامه دار بودن کد است.

4- در روبی نیازی نیست که نوع متغیر را تعریف کنید.

5- کد های بین begin= و end= در روبی نادیده گرفته میشود و برای کامنت گذاری چند خطی کاربرد دارد.

6- لاینی که حاوی عبارت __END__ باشد نادیده گرفته میشود.

مثال:
کد php:
# sample program showing special characters like comments
# I'm a comment line
1  #notice no semicolon and no type declaration
2#notice two statements on one line
name "Abraham \
Lincoln"   
# a line continued by trailing \
puts "#{name}"
=begin
I
'm ignored.
So am I.
=end
puts "goodbye"
__END__
1
2
3


کوتیشن و دابل کوتیشن در روبی:

در روبی مثل زبان پرل کوتیشن ( ' ) و دابل کوتیشن ( " ) با هم تفاوت دارند

در دابل کوتیشن عبارت های مخصوص به عبارت اصلی خودشان تبدیل میشوند اما در کوتیشن یا سینگل کوتیشن(single quotation) اینطور نیست برای درک بهتر مثال میزنم:

دابل کوتیشن:

کد php:
name="Mike"
puts "hi #{name}"
puts "hi\n #{name}" 

نتیجه:
کد:
hi Mike
hi
Mike



کوتیشن:

کد php:
name="Mike"
puts 'hi #{name}'
puts 'hi\n #{name}' 

نتیجه:
کد:
hi #{name}
hi\n #{name}

ادامه دارد...

پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Note آموزش روبی در 20 دقیقه! SOFTAFZAR 0 826 14-11-2012 ساعت 23:13
آخرین ارسال: SOFTAFZAR

کاربرانِ درحال بازدید از این موضوع:   1 مهمان