165
Let’s Learn Ruby - Basic

Let's Learn Ruby - Basic

Embed Size (px)

Citation preview

Page 1: Let's Learn Ruby - Basic

Let’s Learn Ruby - Basic

Page 2: Let's Learn Ruby - Basic
Page 3: Let's Learn Ruby - Basic

Ruby Tuesday

https://www.facebook.com/groups/142197385837507/photo by othree

Page 4: Let's Learn Ruby - Basic

RubyConf Taiwan

http://rubyconf.tw/

Page 5: Let's Learn Ruby - Basic

Rails Girls Taipei

https://www.facebook.com/railsgirlstw

Page 6: Let's Learn Ruby - Basic

WebConf Taiwan 2014

Page 7: Let's Learn Ruby - Basic

750+ attendees

Page 8: Let's Learn Ruby - Basic

all tickets sold out in 4 mins

Page 9: Let's Learn Ruby - Basic

Let’s Learn Ruby

What I want?

Page 10: Let's Learn Ruby - Basic

Let’s Learn Ruby

Problem Solving

Page 11: Let's Learn Ruby - Basic

Let’s Learn Ruby

Active Ecosystem

Page 12: Let's Learn Ruby - Basic

Let’s Learn Ruby

Scenario

Page 13: Let's Learn Ruby - Basic

Let’s Learn Ruby

open source projects on Github

Page 14: Let's Learn Ruby - Basic

Let’s Learn Ruby

History

Page 15: Let's Learn Ruby - Basic

Let’s Learn Ruby

まつもと ゆきひろ (Matz)

Page 16: Let's Learn Ruby - Basic

Let’s Learn Ruby

Page 17: Let's Learn Ruby - Basic

Let’s Learn Ruby

first released at 1995

Page 18: Let's Learn Ruby - Basic

Let’s Learn Ruby

2.0 released at 2013

Page 19: Let's Learn Ruby - Basic

Let’s Learn Ruby

2.1 released at 2013.12

Page 20: Let's Learn Ruby - Basic

Let’s Learn Ruby

Why Ruby? free, open source, easy to learn

Page 21: Let's Learn Ruby - Basic

Let’s Learn Ruby

Ruby != Rails

Page 22: Let's Learn Ruby - Basic

Let’s Learn Ruby

Happy, and Fun

Page 23: Let's Learn Ruby - Basic

Let’s Learn Ruby

Rubies CRuby(MRI), REE, mRuby, MacRuby,

JRuby, IronRuby, Rubinius..etc

Page 24: Let's Learn Ruby - Basic

Let’s Learn Ruby

Version 1.8, 1.9, 2.0, 2.1

Page 25: Let's Learn Ruby - Basic

Let’s Learn Ruby

Ruby 1.8 has no future

Page 26: Let's Learn Ruby - Basic

Let’s Learn Ruby

RVM Ruby Version Manager

https://rvm.io/

Page 27: Let's Learn Ruby - Basic

Let’s Learn Ruby

Editors Vim, Emacs, Sublime Text... etc

Page 28: Let's Learn Ruby - Basic

Let’s Learn Ruby

coding style

https://github.com/styleguide/ruby

Page 29: Let's Learn Ruby - Basic

Let’s Learn Ruby

But Ruby is Slow..?

Page 30: Let's Learn Ruby - Basic

Let’s Learn Ruby

What can Ruby do?

Page 31: Let's Learn Ruby - Basic

Let’s Learn Ruby

Rake Make, but Ruby version.

Rack http://rake.rubyforge.org/

Page 32: Let's Learn Ruby - Basic

Let’s Learn Ruby

Rack it’s a specification (and implementation) of a minimal abstract Ruby API that models HTTP. such as Sinatra, Ruby on Rails

Rack http://rack.rubyforge.org/Sinatra http://www.sinatrarb.comRuby on Rails http://rubyonrails.org/

Page 33: Let's Learn Ruby - Basic

Let’s Learn Ruby

developing MacOS and iOS app

Page 34: Let's Learn Ruby - Basic

Let’s Learn Ruby

drawing, image processing, music..

Page 35: Let's Learn Ruby - Basic

Let’s Learn Ruby

Install Ruby now!

Page 36: Let's Learn Ruby - Basic

Let’s Learn Ruby

http://tryruby.org

Page 37: Let's Learn Ruby - Basic

Let’s Learn Ruby

Interactive Ruby, irb

Page 38: Let's Learn Ruby - Basic

Let’s Learn Ruby

Gem

Page 39: Let's Learn Ruby - Basic

Let’s Learn Ruby

gem install PACKAGE_NAME

Page 40: Let's Learn Ruby - Basic

Let’s Learn Ruby

gem env

Page 41: Let's Learn Ruby - Basic

Let’s Learn Ruby

gem list

Page 42: Let's Learn Ruby - Basic

Let’s Learn Ruby

Variables and Constants

Page 43: Let's Learn Ruby - Basic

Let’s Learn Ruby

local variable variable

Page 44: Let's Learn Ruby - Basic

Let’s Learn Ruby

global variable $variable

Page 45: Let's Learn Ruby - Basic

Let’s Learn Ruby

instance variable @variable

Page 46: Let's Learn Ruby - Basic

Let’s Learn Ruby

class variable @@variable

Page 47: Let's Learn Ruby - Basic

Let’s Learn Ruby

virtual variable true, false, self, nil

Page 48: Let's Learn Ruby - Basic

Let’s Learn Ruby

variable assignment a = 1

x, y, z = 1, 2, 3

Page 49: Let's Learn Ruby - Basic

Let’s Learn Ruby

Constant begins with a capital letter,

and it can be changed

Page 50: Let's Learn Ruby - Basic

Let’s Learn Ruby

Reserved word and Keyword

Page 51: Let's Learn Ruby - Basic

Let’s Learn Ruby

Reserved word and Keyword

Page 52: Let's Learn Ruby - Basic

Let’s Learn Ruby

Logic and Flow Control

Page 53: Let's Learn Ruby - Basic

Let’s Learn Ruby

only false and nil are false

Page 54: Let's Learn Ruby - Basic

Let’s Learn Ruby

true v.s TrueClass false v.s FalseClass

nil v.s NilClass

Page 55: Let's Learn Ruby - Basic

Let’s Learn Ruby

if..elsif..end

Page 56: Let's Learn Ruby - Basic

Let’s Learn Ruby

unless = not if

Page 57: Let's Learn Ruby - Basic

Let’s Learn Ruby

if modifier

Page 58: Let's Learn Ruby - Basic

Let’s Learn Ruby

case .. when..

Page 59: Let's Learn Ruby - Basic

Let’s Learn Ruby

BEGIN{} and END{}

Page 60: Let's Learn Ruby - Basic

Let’s Learn Ruby

a = true ? 'a' : 'b'

Page 61: Let's Learn Ruby - Basic

Let’s Learn Ruby

a ||= 'a'

Page 62: Let's Learn Ruby - Basic

Let’s Learn Ruby

Comment # single line

Page 63: Let's Learn Ruby - Basic

Let’s Learn Ruby

Comment =begin .. =end

Page 64: Let's Learn Ruby - Basic

Let’s Learn Ruby

Loop and Iteration

Page 65: Let's Learn Ruby - Basic

Let’s Learn Ruby

for.. in..

Page 66: Let's Learn Ruby - Basic

Let’s Learn Ruby

while .. end

Page 67: Let's Learn Ruby - Basic

Let’s Learn Ruby

until .. end

Page 68: Let's Learn Ruby - Basic

Let’s Learn Ruby

until = not while

Page 69: Let's Learn Ruby - Basic

Let’s Learn Ruby

times

Page 70: Let's Learn Ruby - Basic

Let’s Learn Ruby

upto, downto

Page 71: Let's Learn Ruby - Basic

Let’s Learn Ruby

each, each_with_index

Page 72: Let's Learn Ruby - Basic

Let’s Learn Ruby

Integer

http://www.ruby-doc.org/core-2.1.0/Integer.html

Page 73: Let's Learn Ruby - Basic

Let’s Learn Ruby

Fixnum and Bignum

Page 74: Let's Learn Ruby - Basic

Let’s Learn Ruby

10 / 3

Page 75: Let's Learn Ruby - Basic

Let’s Learn Ruby

String

http://ruby-doc.org/core-2.1.0/String.html

Page 76: Let's Learn Ruby - Basic

Let’s Learn Ruby

single and double quotes

Page 77: Let's Learn Ruby - Basic

Let’s Learn Ruby

%q v.s %Q

Page 78: Let's Learn Ruby - Basic

Let’s Learn Ruby

"%s" % "eddie"

Page 79: Let's Learn Ruby - Basic

Let’s Learn Ruby

string interpolation

Page 80: Let's Learn Ruby - Basic

Let’s Learn Ruby

Exercise please calculate how many “characters” and “words” of a section of a random article with Ruby.

Page 81: Let's Learn Ruby - Basic

Let’s Learn Ruby

Exercise please convert string “abcdefg” to “gfedcba” without using String#reverse method.

Page 82: Let's Learn Ruby - Basic

Let’s Learn Ruby

Array

http://ruby-doc.org/core-2.1.0/Array.html

Page 83: Let's Learn Ruby - Basic

Let’s Learn Ruby

Array.new v.s []

Page 84: Let's Learn Ruby - Basic

Let’s Learn Ruby

%w

Page 85: Let's Learn Ruby - Basic

Let’s Learn Ruby

Exercise please sort a given array [1, 3, 4, 1, 7, nil, 7], and remove nil and duplicate number.

Page 86: Let's Learn Ruby - Basic

Let’s Learn Ruby

Exercise please covert a given array [1, 2, 3, 4, 5] to [1, 3, 5, 7, 9] with Array#map method.

Page 87: Let's Learn Ruby - Basic

Let’s Learn Ruby

Exercise please draw 5 unique random number between 1 to 52.

Page 88: Let's Learn Ruby - Basic

Let’s Learn Ruby

Hash

http://ruby-doc.org/core-2.1.0/Hash.html

Page 89: Let's Learn Ruby - Basic

Let’s Learn Ruby

Hash.new v.s {}

Page 90: Let's Learn Ruby - Basic

Let’s Learn Ruby

a = { :name => 'eddie' } a = { name: 'eddie' }

Page 91: Let's Learn Ruby - Basic

Let’s Learn Ruby

Range

http://ruby-doc.org/core-2.1.0/Range.html

Page 92: Let's Learn Ruby - Basic

Let’s Learn Ruby

(1..10) v.s (1...10)

Page 93: Let's Learn Ruby - Basic

Let’s Learn Ruby

Exercise please calculate the sum from 1 to 100 with Range.

Page 94: Let's Learn Ruby - Basic

Let’s Learn Ruby

Methods

Page 95: Let's Learn Ruby - Basic

Let’s Learn Ruby

def method_name(param) ... end

Page 96: Let's Learn Ruby - Basic

Let’s Learn Ruby

parentheses can be omitted

Page 97: Let's Learn Ruby - Basic

Let’s Learn Ruby

? and !

Page 98: Let's Learn Ruby - Basic

Let’s Learn Ruby

return value

Page 99: Let's Learn Ruby - Basic

Let’s Learn Ruby

Singleton Method

Page 100: Let's Learn Ruby - Basic

Let’s Learn Ruby

class Cat def walk puts "I'm walking" end end ! cat = Cat.new def cat.fly puts "I can fly" end cat.fly

Page 101: Let's Learn Ruby - Basic

Let’s Learn Ruby

Method Missing

Page 102: Let's Learn Ruby - Basic

Let’s Learn Ruby

def method_missing(method_name) puts "method: #{method_name} is called!" end !

something_not_exists()

Page 103: Let's Learn Ruby - Basic

Let’s Learn Ruby

Exception Handling begin .. rescue.. else.. ensure.. end

Page 104: Let's Learn Ruby - Basic

Let’s Learn Ruby

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

Page 105: Let's Learn Ruby - Basic

Let’s Learn Ruby

Block

Page 106: Let's Learn Ruby - Basic

Let’s Learn Ruby

Proc

Page 107: Let's Learn Ruby - Basic

Let’s Learn Ruby

my_square = Proc.new { | x | x ** 2 } !# how to call a proc puts my_square.call(10) # 100 puts my_square[10] # 100 puts my_square.(10) # 100 puts my_square === 10 # 100

Page 108: Let's Learn Ruby - Basic

Let’s Learn Ruby

lambda, ->

Page 109: Let's Learn Ruby - Basic

Let’s Learn Ruby

my_lambda = lambda { | x | x ** 2 } !# new style in 1.9 my_lambda = -> x { x ** 2 } !# how to call a lambda? puts my_lambda.call(10) # 100 puts my_lambda[10] # 100 puts my_lambda.(10) # 100 puts my_lambda === 10 # 100

Page 110: Let's Learn Ruby - Basic

Let’s Learn Ruby

Proc v.s lambda

Page 111: Let's Learn Ruby - Basic

Let’s Learn Ruby

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

Page 112: Let's Learn Ruby - Basic

Let’s Learn Ruby

{} v.s do..end

http://blog.eddie.com.tw/2011/06/03/do-end-vs-braces/

Page 113: Let's Learn Ruby - Basic

Let’s Learn Ruby

Yield

Page 114: Let's Learn Ruby - Basic

Let’s Learn Ruby

Object-Oriented Programming

Page 115: Let's Learn Ruby - Basic

Let’s Learn Ruby

everything in Ruby is an Object

Page 116: Let's Learn Ruby - Basic

Let’s Learn Ruby

object = state+ behavior

Page 117: Let's Learn Ruby - Basic

Let’s Learn Ruby

root class = Object root class would be BasicObject in Ruby 1.9

Page 118: Let's Learn Ruby - Basic

Let’s Learn Ruby

class ClassName < ParentClass ... end

Page 119: Let's Learn Ruby - Basic

Let’s Learn Ruby

Naming Convention

Page 120: Let's Learn Ruby - Basic

Let’s Learn Ruby

initialize

Page 121: Let's Learn Ruby - Basic

Let’s Learn Ruby

ClassName.new

Page 122: Let's Learn Ruby - Basic

Let’s Learn Ruby

self = current object

Page 123: Let's Learn Ruby - Basic

Let’s Learn Ruby

instance and class variable

Page 124: Let's Learn Ruby - Basic

Let’s Learn Ruby

instance and class method

Page 125: Let's Learn Ruby - Basic

Let’s Learn Ruby

Exercise please create a Dog class and Cat class, which are both inherited from Animal class, and implement “walk” and “eat” methods.

Page 126: Let's Learn Ruby - Basic

Let’s Learn Ruby

public, protected and private method

Page 127: Let's Learn Ruby - Basic

Let’s Learn Ruby

getter and setter

Page 128: Let's Learn Ruby - Basic

Let’s Learn Ruby

attr_reader, attr_writer and attr_accessor

Page 129: Let's Learn Ruby - Basic

Let’s Learn Ruby

Open Class

Page 130: Let's Learn Ruby - Basic

Let’s Learn Ruby

Module

Page 131: Let's Learn Ruby - Basic

Let’s Learn Ruby

module ModuleName ... end

Page 132: Let's Learn Ruby - Basic

Let’s Learn Ruby

module has no inheritance

Page 133: Let's Learn Ruby - Basic

Let’s Learn Ruby

module has no instance

Page 134: Let's Learn Ruby - Basic

Let’s Learn Ruby

Naming Convention

Page 135: Let's Learn Ruby - Basic

Let’s Learn Ruby

require v.s load

Page 136: Let's Learn Ruby - Basic

Let’s Learn Ruby

Priority?

Page 137: Let's Learn Ruby - Basic

Let’s Learn Ruby

Exercise please create a Bird class, which is also inherited from Animal class, but include a Fly module.

Page 138: Let's Learn Ruby - Basic

Let’s Learn Ruby

Mixin

Page 139: Let's Learn Ruby - Basic

Let’s Learn Ruby

Ruby is single inheritance

Page 140: Let's Learn Ruby - Basic

Let’s Learn Ruby

Duck Typing

Page 141: Let's Learn Ruby - Basic

Let’s Learn Ruby

include v.s extend

Page 142: Let's Learn Ruby - Basic

Let’s Learn Ruby

Bundle

Page 143: Let's Learn Ruby - Basic

Let’s Learn Ruby

Gemfile

Page 144: Let's Learn Ruby - Basic

Let’s Learn Ruby

http://rubygems.org/

Page 145: Let's Learn Ruby - Basic

Let’s Learn Ruby

gem "nokogiri", :git => "git://github.com/tenderlove/nokogiri.git" gem "secret_gem", :path => "~/my_secret_path"

Page 146: Let's Learn Ruby - Basic

Let’s Learn Ruby

bundle install

Page 147: Let's Learn Ruby - Basic

Let’s Learn Ruby

pack your own gem!

Page 148: Let's Learn Ruby - Basic

Let’s Learn Ruby

1. bundle gem NEW_NAME 2. gem build NEW_NAME.gemspec 3. gem push NEW_NAME.gem

http://guides.rubygems.org/make-your-own-gem/

Page 149: Let's Learn Ruby - Basic

Let’s Learn Ruby

Exercise please try to create a Gem spec with bundle command, modify, build and push to rubygems.org.

Page 150: Let's Learn Ruby - Basic

Let’s Learn Ruby

Rake

Page 151: Let's Learn Ruby - Basic

Let’s Learn Ruby

desc "mail sender" task :sendmail do puts "grap mailing list from database..." sleep 3 puts "mail sending..." sleep 3 puts "done!" end

Page 152: Let's Learn Ruby - Basic

Let’s Learn Ruby

task :goto_toliet do puts "goto toliet" end ! task :open_the_door => :goto_toliet do puts "open door" end

Page 153: Let's Learn Ruby - Basic

Let’s Learn Ruby

TDD

Page 154: Let's Learn Ruby - Basic

Let’s Learn Ruby

require “minitest/autorun" !class TestMyBMI < MiniTest::Unit::TestCase def test_my_calc_bmi_is_ok assert_equal calc_bmi(175, 80), 26.12 end end !def calc_bmi(height, weight) bmi = ( weight / (height/100.0) ** 2 ).round(2) end

Page 155: Let's Learn Ruby - Basic

Let’s Learn Ruby

require "minitest/autorun" describe "test my bmi calculator" do it "should calc the correct bmi" do calc_bmi(175, 80).must_equal 26.12 end end def calc_bmi(height, weight) bmi = ( weight / (height/100.0) ** 2 ).round(2) end

Page 156: Let's Learn Ruby - Basic

Let’s Learn Ruby

Ruby Koans

http://rubykoans.com/

Page 157: Let's Learn Ruby - Basic

Let’s Learn Ruby

Ruby Object Model

Page 158: Let's Learn Ruby - Basic

Let’s Learn Ruby

At last..

Page 159: Let's Learn Ruby - Basic

photo by redjar

Page 160: Let's Learn Ruby - Basic

Let’s Learn Ruby

pick up one scripting language

Page 161: Let's Learn Ruby - Basic

photo by Quality & Style

Page 162: Let's Learn Ruby - Basic

Let’s Learn Ruby

@eddiekao

https://www.ruby-lang.org/zh_tw/

Page 163: Let's Learn Ruby - Basic

Let’s Learn Ruby

Ruby is fun!

Page 164: Let's Learn Ruby - Basic

Let’s Learn Ruby

The only limitation is your imagination.

Page 165: Let's Learn Ruby - Basic

⾼高⾒見⻯⿓龍Contacts

photo by Eddie

Website

Blog

Plurk

Facebook

Google Plus

Twitter

Email

Mobile

http://www.eddie.com.tw

http://blog.eddie.com.tw

http://www.plurk.com/aquarianboy

http://www.facebook.com/eddiekao

http://www.eddie.com.tw/+

https://twitter.com/eddiekao

[email protected]

+886-928-617-687