Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ruby for Starter
Search
高見龍
March 23, 2013
Programming
3
420
Ruby for Starter
高見龍
March 23, 2013
Tweet
Share
More Decks by 高見龍
See All by 高見龍
讓數據說話:用 Python、Prometheus 和 Grafana 講故事
eddie
0
350
AI 時代的程式語言學習法
eddie
0
55
前端模組解放運動 - importmap
eddie
0
1.2k
Git 和 DevOps - 在混亂的流星群開發流程中找到小確幸
eddie
1
1.1k
模組化前端開發:從亂七八糟到組織有序
eddie
0
1.4k
被 Vue 框架耽誤的建置工具
eddie
2
940
開開心心寫測試,你的程式碼也會微笑
eddie
1
1.2k
Functional Ruby
eddie
1
250
閱讀原始碼 - 再戰十年的 jQuery
eddie
1
750
Other Decks in Programming
See All in Programming
Why Spring Matters to Jakarta EE - and Vice Versa
ivargrimstad
0
980
GCCのプラグインを作る / I Made a GCC Plugin
shouth
1
150
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
850
Nuxtベースの「WXT」でChrome拡張を作成する | Vue Fes 2024 ランチセッション
moshi1121
1
520
EventSourcingの理想と現実
wenas
6
2.1k
Outline View in SwiftUI
1024jp
1
150
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
550
レガシーな Android アプリのリアーキテクチャ戦略
oidy
1
170
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
440
のびしろを広げる巻き込まれ力:偶然を活かすキャリアの作り方/oso2024
takahashiikki
1
410
PagerDuty を軸にした On-Call 構築と運用課題の解決 / PagerDuty Japan Community Meetup 4
horimislime
1
110
Importmapを使ったJavaScriptの 読み込みとブラウザアドオンの影響
swamp09
4
1.2k
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
88
5.7k
Making the Leap to Tech Lead
cromwellryan
132
8.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.8k
Thoughts on Productivity
jonyablonski
67
4.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Art, The Web, and Tiny UX
lynnandtonic
296
20k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.2k
RailsConf 2023
tenderlove
29
880
Building Flexible Design Systems
yeseniaperezcruz
327
38k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
4 Signs Your Business is Dying
shpigford
180
21k
Transcript
Ruby Starter eddie@fju
None
current status
80% iOS app, 20% Ruby/Rails
What I want?
Problem Solving
History
まつもと ゆきひろ (Matz)
first released at 1995
2.0 released at 2013
None
Why Ruby? free, open source, easy to learn
Ruby != Rails
Happy, and Fun
Rubies CRuby(MRI), REE, mRuby, JRuby, IronRuby, Rubinius..etc
Version 1.8, 1.9, 2.0
Ruby 1.8 has no future
RVM Ruby Version Manager https://rvm.io/
Editors Vim, Emacs, TextMate, Sublime Text... etc
git
coding style https://github.com/styleguide/ruby
Variables and Constants
local variable variable
global variable $variable
instance variable @variable
class variable @@variable
virtual variable true, false, self, nil
variable assignment a = 1 x, y, z = 1,
2, 3
Constant begins with a capital letter, and it can be
changed
Reserved word and Keyword
Logic and Flow Control
only false and nil are false
true v.s. TrueClass false v.s. FalseClass nil v.s. NilClass
if..elsif..end
unless = if not
if modifier
case .. when..
BEGIN{} and END{}
a = true ? 'a' : 'b'
a ||= 'a'
Comment # single line
Comment =begin .. =end
Loop and Iteration
for.. in..
while .. end
until .. end
until = while not
times
upto, downto
each, each_with_index
Block
Proc
my_square = Proc.new { | x | x ** 2
} my_square.call(10) # 100 my_square[10] # 100
lambda, ->
my_lambda = lambda { | x | x ** 2
} # new style in 1.9 my_lambda = -> x { x ** 2 } # how to call a lambda? my_lambda.call(10) my_lambda[10]
Proc v.s. lambda
def proc_test puts "hello" my_proc = Proc.new { return 1
} my_proc.call puts "ruby" end def lambda_test puts "hello" my_lambda = lambda { return 1 } my_lambda.call puts "ruby" end
{} v.s. do..end http://blog.eddie.com.tw/2011/06/03/do-end-vs-braces/
Number
Fixnum and Bignum
10 / 3
String http://ruby-doc.org/core-1.9.2/String.html
single and double quotes
%q v.s. %Q
"%s" % "eddie"
string interpolation
Array http://ruby-doc.org/core-1.9.2/Array.html
Array.new v.s. []
%w
Hash http://ruby-doc.org/core-1.9.2/Hash.html
Hash.new v.s {}
a = { :name => 'eddie' } a = {
name: 'eddie' }
Range http://ruby-doc.org/core-1.9.2/Range.html
(1..10) v.s. (1...10)
Methods
def method_name(param) ... end
parentheses can be omitted
? and !
return value
Singleton Method
class Cat def walk puts "I'm walking" end end cat
= Cat.new def cat.fly puts "I can fly" end cat.fly
Method Missing
def method_missing(method_name) puts "method: #{method_name} is called!" end [1, 2,
3, 4].hello
Exception Handling begin .. rescue.. else.. ensure.. end
def open_my_file(file_name) File.open file_name do |f| puts f.read end end
begin open_my_file("block_demo.r") rescue => e puts e else puts "it's working good!" ensure puts "this must be executed, no matter what" end
Object-Oriented Programming
everything in Ruby is an Object
object = state+ behavior
top class = Object top class would be BasicObject in
Ruby 1.9
class ClassName < ParentClass ... end
Naming Convention
initialize
ClassName.new
self = current object
instance and class variable
instance and class method
public, protected and private method
getter and setter
attr_reader, attr_writer and attr_accessor
Open Class
Module
module ModuleName ... end
module has no inheritance
module has no instance
Naming Convention
require v.s. load
Mixin
Ruby is single inheritance
Duck Typing
include v.s. extend
Gem
gem install PACKAGE_NAME
gem env
Bundle
Gemfile
gem "nokogiri", :git => "git://github.com/tenderlove/nokogiri.git" gem "secret_gem", :path => "~/my_secret_path"
bundle install
pack your own gem!
1. bundle gem NEW_NAME 2. gem build NEW_NAME.gemspec 3. gem
push NEW_NAME.gem http://docs.rubygems.org/read/chapter/20
Rake
Ruby Object Model