آموزش زبان اسکریپتی روبی

Ruby

توسط reza-irdev در 6 سال پیش
0 1.8k 3 6 سال پیش
reza-irdev
0

سلام دوستان

تو این تاپیک قصد داریم با هم یکم روبی کار کنیم! اگر مطلب آموزشی درباره این زبان دارید میتونید تو همین تاپیک پست بزنید[color=#FF0000] لطفا اگه کسی میخواد این آموزش رو کپی کنه منبع رو هم ذکر کنه[/color] موفق باشید :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) و پایفان است. اعلان کلاسها و متدها توسط کلمات کلیدی انجام میشود. در مقایسه با پرل متغیرها الزاما با یک علامت خاص شروع نمیشوند. (وقتی از چنین علائمی استفاده شود علامت حوزه دید متغیر را تغییر میدهد.) بارزترین تفاوت روبی از سی و پرل آنست که کلمات کلیدی (بجای براکت) برای تعریف بلوکهای کد استفاده میشوند. سطر جدید بعنوان پایان یک جمله بکار برده میشود در عین حال که برای اینکار میتوان از یک سمی کالون (;) نیز استفاده کرد. تورفتگیها معنی خاصی ندارند (برعکس پایفان). نمونه هایی از سینتکس روبی را میتوانید در بخش مثالها ببینید.

برای اجرای سورس های روبی شما اول باید این برنامه رو نصب کنید لینک دانلود:

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"

[align=center][ATTACH=CONFIG]298[/ATTACH][/align]

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

[align=center][/align]

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

0

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

خروجی در روبی( 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:

0

سلام دوستان

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

مثال:

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} بذارید.

*نکته: -در اینجا برای فراخوانی تابع نیازی نیست که حتما آرگومان ما داخل پرانتز باشه مثال:

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

خروجی:

Hello visitor

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

مثال:

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)

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

def multiply(a,b)
  product = a * b
  return product
end

فراخوانی تابع:

puts multiply(2,3)

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

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

مثال:

def multiply(c,d)
  product = c * 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. استفاده میکنیم

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

به مثال توجه کنید:

def test(a=1,b=2,c=a+b)
  puts "#{a},#{b},#{c}"
end

فراخوانی:

test
test 5
test 4, 6
test 3, 4, 6

نتیجه:

1,2,3
5,2,7
4,6,10
3,4,6

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

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

مثال:

def getCostAndMpg
    cost = 30000  # some fancy db calls go here
    mpg = 30
    return cost,mpg
end
AltimaCost, AltimaMpg = getCostAndMpg
puts "AltimaCost = #{AltimaCost}, AltimaMpg = #{AltimaMpg}"

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

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

0

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


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

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

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

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

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

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

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

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

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

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

2- برای پایان یک خط کد نیازی به سمی کالن ( ; ) نیست، کاربرد آن برای جدا کردن دو کد در یک خط است

f="Soft"
s="Afzar";puts ("#{f}#{s}")

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

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

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

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

مثال:

# sample program showing special characters like comments
# I'm a comment line
a = 1  #notice no semicolon and no type declaration
b = 2; c = 3 #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
4

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

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

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

دابل کوتیشن:

name="Mike"
puts "hi #{name}"
puts "hi\n #{name}"

نتیجه:

hi Mike
hi
 Mike

کوتیشن:

name="Mike"
puts 'hi #{name}'
puts 'hi\n #{name}'

نتیجه:

hi #{name}
hi\n #{name}

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

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید