seven-languages-in-seven-weeks/slides/ruby.org
2015-06-09 11:41:57 -04:00

181 lines
3.7 KiB
Org Mode

#+TITLE: Seven Languages in Seven Weeks
#+BEAMER_HEADER: \subtitle{Ruby}
#+BEAMER_HEADER: \institute[INST]{Extreme Tech Seminar}
#+AUTHOR: Correl Roush
#+EMAIL: correl@gmail.com
#+DATE: May 27, 2015
#+OPTIONS: H:2 toc:nil ^:nil
#+STARTUP: beamer indent
#+COLUMNS: %45ITEM %10BEAMER_env(Env) %10BEAMER_act(Act) %4BEAMER_col(Col) %8BEAMER_opt(Opt)
#+PROPERTY: BEAMER_col_ALL 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.0 :ETC
#+LaTeX_CLASS: beamer
#+LaTeX_CLASS_OPTIONS: [presentation,aspectratio=169]
* Introduction
** Introduction
*** Ruby :BMCOL:
:PROPERTIES:
:BEAMER_col: 0.5
:END:
- Created :: ~1993
- Author :: Yukihiro Matsumoto
Interpreted, object-oriented, and dynamically typed.
*** Mary Poppins :BMCOL:
:PROPERTIES:
:BEAMER_col: 0.5
:END:
#+ATTR_LATEX: width=\textwidth
[[file:mary_poppins_remake_by_gali_miau-d4nyzkc.jpg]]
** Getting Ruby
http://www.ruby-lang.org/en/downloads/
** Example
*** Source
#+name: ruby-intro
#+BEGIN_SRC ruby :results output :exports both
properties = ['object oriented', 'duck typed',
'productive', 'fun']
properties.each {|property| puts "Ruby is #{property}."}
#+END_SRC
*** Output
#+RESULTS: ruby-intro
: Ruby is object oriented.
: Ruby is duck typed.
: Ruby is productive.
: Ruby is fun.
* Day 1
** Day 1: Finding a Nanny :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
- Object-Oriented
- Simple Conditionals
- Strong / Dynamic Typing
- Duck Typing
** Duck Typing
*** Source
#+name: ruby-duck-typing
#+BEGIN_SRC ruby :results output :exports both
i = 0
a = ['100', 100.0]
while i < 2
puts a[i].to_i
i = i + 1
end
#+END_SRC
*** Output
#+RESULTS: ruby-duck-typing
: 100
: 100
** Exercises
#+BEGIN_CENTER
EXERCISES
#+END_CENTER
* Day 2
** Day 2: Floating Down from the Sky
- Defining Functions
- Arrays
- Hashes
- Code Blocks and Yield
- Running Ruby from a File
- Defining Classes
- Writing a Mixin
- Modules, Enumerable, and Sets
** Defining Functions
#+BEGIN_SRC ruby
def tell_the_truth
true
end
#+END_SRC
** Code Blocks
*** Source
#+name: ruby-blocks
#+BEGIN_SRC ruby :results output :exports both
class Fixnum
def my_times
i = self
while i > 0
i = i - 1
yield
end
end
end
3.my_times {puts 'mangy moose'}
#+END_SRC
*** Results
#+RESULTS: ruby-blocks
: mangy moose
: mangy moose
: mangy moose
** Classes
[[file:ruby-metamodel.png]]
** Exercises
#+BEGIN_CENTER
EXERCISES
#+END_CENTER
* Day 3
** Day 3: Serious Change
- Open Classes
- =method_missing=
- Modules
** method_missing
*** Source :BMCOL:
:PROPERTIES:
:BEAMER_col: 0.7
:END:
#+name: ruby-method-missing
#+BEGIN_SRC ruby :results output :exports both
class Roman
def self.method_missing name, *args
roman = name.to_s
roman.gsub!("IV", "IIII")
roman.gsub!("IX", "VIIII")
roman.gsub!("XL", "XXXX")
roman.gsub!("XC", "LXXXX")
(roman.count("I") +
roman.count("V") * 5 +
roman.count("X") * 10 +
roman.count("L") * 50 +
roman.count("C") * 100)
end
end
puts Roman.X
puts Roman.XC
puts Roman.XII
puts Roman.X
#+END_SRC
*** Results :BMCOL:
:PROPERTIES:
:BEAMER_col: 0.3
:END:
#+RESULTS: ruby-method-missing
: 10
: 90
: 12
: 10
** Exercises
#+BEGIN_CENTER
EXERCISES
#+END_CENTER
* Wrapping Up
** Wrapping Up: Core Strengths
- Scripting
- Web Development
- Time to Market
** Wrapping Up: Weaknesses
- Performance
- Concurrency and OOP
- Type Safety
** Final Thoughts
Syntax and flexibility vs. performance.