Ruby 初階課程
Ruby是一個物件導向的程式語言,是由日本人松本行弘(Matz)設計開發的,減少編程時候的不必要的瑣碎時間,讓編寫程式的人高興是設計Ruby語言的Matz的一個首要的考慮;其次是良好的介面設計。他強調系統設計必須強調人性化,而不是一味從機器的角度設想人們特別是電腦工程師們,常常從機器著想。他們認為:「這樣做,機器就能執行的更快;這樣做,機器執行效率更高;這樣做,機器就會怎樣怎樣怎樣。」實際上,我們需要從人的角度考慮問題,人們怎樣編寫程式或者怎樣使用機器上應用程式。我們是主人,他們是僕人。
因此Ruby的語法很直觀,較容易理解,與其他程式語言有較大的差異,現行使用版本通常為2.0以上,課程中所使用編輯器為sublime text
Ruby 中所有東西都是物件,除了block
---------------------------------------------------------------------------------------------
印出陣列程式碼
陣列的指定
指定第一個位置為friendds[0]、friends.first,最後為friends.last
p friend 可以印出該陣列的值
(1..52).to_a --會宣告一個1~52的陣列
---------------------------------------------------------------------------------------------
宣告一個1~100的陣列並加總
def self.fly --self 可以寫成Dog
puts "aa"
end
end
dd=Dog.new
Dog.fly
結果為aa
---------------------------------------------------------------------------------------------
def sleep
secret --secret、self.secret皆可以
self.secret --secret、self.secret皆可以
end
protected
def secret
puts "heyhey"
end
end
dd.sleep
---------------------------------------------------------------------------------------------
class Dog
改成這樣就可以
class Dog
模組無法繼承
模組無法實體化
# --後面是註解
5 time{} --代表將{}內程式執行5次
nil --等於空、沒有的意思
10/3 --為3因為前後都是整數
10/3.0 --為3.333....
字串宣告為單引號''、雙引號"",單引號內不可以呼叫變數,雙引號可以"hello, #{name}"
字串宣告也可以用%q(a) == 'a'、%Q(a) = "a"
使用指令:
gem list --目前安裝的套件
gem unpack PACKAGE_NAME --查看該套件的位置
Ruby 基礎
Ruby是完全物件導向的程式語言Ruby 中所有東西都是物件,除了block
Ruby 中所有東西都是物件,除了block
變數不需要進行宣告,不用打String x=1;,可以直接寫x=1
變數不需要進行宣告,不用打String x=1;,可以直接寫x=1
變數
@+NAME --實體變數
@@+NAME --類別變數
@@+NAME --類別變數
Ex:name="abc" --區域變數
Ex:Name="abc" --常數以大寫字母開頭,可以被改變
$+NAME --全域變數
基礎用法
if
if x==1
puts
"1"
else
puts
"2"
end
在Ruby中的if用法是If elsif end
其他也有case...when...end---------------------------------------------------------------------------------------------
陣列
friends =[1,2,3] --宣告陣列,陣列中有1、2、3印出陣列程式碼
for friend in friends
puts
friend
end
friends.each do |friend|
puts
friend
end
這兩種寫法是一樣的,通常使用下面的each寫法陣列的指定
指定第一個位置為friendds[0]、friends.first,最後為friends.last
p friend 可以印出該陣列的值
(1..52).to_a --會宣告一個1~52的陣列
---------------------------------------------------------------------------------------------
迴圈
分別印出從1~10與10~1 的迴圈
1.upto(10) do |i| --將1~10照順序帶入變數i
puts
"ht,ruby #{i}" --印出十次
end
10.downto(1) do |i| --將10~1照順序帶入變數i
puts
"hi,ruby #{i}" --印出十次
end宣告一個1~100的陣列並加總
(1..100).to_a.each do|i| --將1~100照順序帶入變數i
sum+=i --將sum+i,也就是1+2+...+100
end
---------------------------------------------------------------------------------------------宣告mothed方法
def say_hello_to(name,age) --宣告一方法say_hello_to,且有輸入值name、age
puts "hello, #{name},I am #{age}" --印出子串,並帶入變數
end
say_hello_to("abc",18) --這行呼較叫say_hello_to並帶入兩變數
結果為hello, abc ,I am 18
puts ""中的#{name}表示在字串中帶入變數name的值
---------------------------------------------------------------------------------------------puts ""中的#{name}表示在字串中帶入變數name的值
yield 控制權移出
def do_something
puts
"1"
yield
"xyz", 12 --移出並帶入變數
puts
"2"
end
do_something do |i,j|
puts
"Hello #{i} ,#{j}"
end
結果為 1 Hello xyz,12 2
當執行到 yield時,自動執行do_something,如果沒有打do_something,並不會執行do_something
當執行到 yield時,自動執行do_something,如果沒有打do_something,並不會執行do_something
if block_given
yield
end
也可以寫成 yield if block_given?
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
Class
class Animal --宣告class 變數字首必須要大寫
def
sleep
puts
"z~z~z~"
end
end
class Cat < Animal --代表Cat繼承Animal
end
class Dog < Animal --代表Dog繼承Animal
end
dd=Dog.new
dd.sleep --因為繼承Animal,所以有sleep
cc=Cat.new
cc.sleep --因為繼承Animal,所以有sleep
---------------------------------------------------------------------------------------------
class Dog
---------------------------------------------------------------------------------------------
class Dog
end
dd=Dog.new
def dd.sleep --宣告dd.sleep,只有dd可用其他的不可以用
puts
"zzzz"
end
dd.sleep
結果為 zzzz
cc=Dog.new
cc.sleep --因為只有dd.sleep,所以cc會找不到sleep方法
---------------------------------------------------------------------------------------------結果為 zzzz
cc=Dog.new
cc.sleep --因為只有dd.sleep,所以cc會找不到sleep方法
類別方法
class Dogdef self.fly --self 可以寫成Dog
puts "aa"
end
end
dd=Dog.new
Dog.fly
結果為aa
---------------------------------------------------------------------------------------------
Protected
class Dogdef sleep
secret --secret、self.secret皆可以
self.secret --secret、self.secret皆可以
end
protected
def secret
puts "heyhey"
end
end
dd.sleep
---------------------------------------------------------------------------------------------
Private
def
sleep
puts
"aa"
end
private
def
secret
puts
"heyhey"
end
end
dd=Dog.new
dd.secret --因為是pirvate程式,所以會錯誤
dd.send(:secret) --可以直接呼叫private的程式改成這樣就可以
class Dog
def sleep
secret --前面沒有東西,不可以用self.secret
end
private
def secret
puts "heyhey"
end
end
dd.sleep
---------------------------------------------------------------------------------------------
def
initialize(name)
@name=name
end
def
name
@name
end
def
name=(new_name)
@name=new_name
end
end
dd=Dog.new("lucky")
puts dd.name
- - - - - - - - - - - -
- - - - - - - - - - - -
class Dog
attr_accessor:name
def
name
@name
end
def
name=(new_name)
@name=new_name
end
end
dd=Dog.new("lucky")
puts dd.name
以上兩個是相同的意思,只是縮寫
---------------------------------------------------------------------------------------------Module 模組
有時會我們會需要需要一些特別的方法,但又不想要使用繼承,這時候可以使用Module
模組無法實體化
module Flyable --宣告模組flyable
def
fly
puts
"I can fly"
end
end
class Dog
include
Flyable --組入模組flyable
end
Dog.new.fly
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
特殊用法&注意
a ||=10 --表示若a沒有宣告即為10,若有就沒做動作# --後面是註解
5 time{} --代表將{}內程式執行5次
nil --等於空、沒有的意思
10/3 --為3因為前後都是整數
10/3.0 --為3.333....
字串宣告為單引號''、雙引號"",單引號內不可以呼叫變數,雙引號可以"hello, #{name}"
字串宣告也可以用%q(a) == 'a'、%Q(a) = "a"
陣列內不一定要存放相同的類型,可以同時存數字與文字
10 ** 2 --是指10的2次方
10 ** 2 --是指10的2次方
xxx.superclass --會印出xxx繼承自誰
open Class --Ruby可以更改class包含預設的,如+、-、*、/
---------------------------------------------------------------------------------------------
open Class --Ruby可以更改class包含預設的,如+、-、*、/
---------------------------------------------------------------------------------------------
之前在學校都是使用java、javascript,今天了解了Ruby發現它真的是一個很特別的語言,與之前看過的程式語言都不太一樣,因差異太大,有學過java反而有點難懂,如果熟練了之後,寫程式可以更快更方便
沒有留言:
張貼留言