1/3 / 1/2
-1/3 / 1/2
1/3r / 1/2r
(1/3r) / (1/2r)
Copyright By PowCoder代写 加微信 powcoder
Computer Science and Engineering The Ohio State University
Introduction, Basics, Dynamic Types
Computer Science and Engineering College of Engineering The Ohio State University
Ruby vs Java: Similarities
Computer Science and Engineering The Ohio State University
Imperative and object-oriented
Classes and instances (ie objects) Inheritance
Strongly typed
Classes determine valid operations
Some familiar operators
Arithmetic, bitwise, comparison, logical
Some familiar keywords
if, then, else, while, for, class, new…
But Ruby Looks Different
Computer Science and Engineering The Ohio State University
Punctuation
Omits ;’s and often ()’s on function calls Includes function names ending in ? and !
New keywords and operators
def, do..end, yield, unless
** (exp), =~ (match), <=> (spaceship)
Rich core libraries
Collections: Hashes, Arrays Strings and regular expressions Enumerators for iteration
Deeper Differences As Well
Computer Science and Engineering The Ohio State University
Interpreted (typically)
Run a program directly, without compiling
Dynamically typed
Objects have types, variables don’t
Everything is an object C.f. primitives in Java
Code can be passed in to a function as
a parameter
Added to Java in version 8 (“lambdas”)
Compiling Programs
Computer Science and Engineering The Ohio State University
Program = Text file
Contains easy-to-understand statements like “print”, “if”, “while”, etc.
But a computer can only execute
machine instructions
Instruction set architecture of the CPU
Recall “Bugs World” from CSE 2231 Examples: C, C++, Objective-C, Ada…
A compiler translates the program
(source code) into an executable
(machine code)
Interpreting Programs
Computer Science and Engineering The Ohio State University
An interpreter reads a program and executes it directly
Advantages
Platform independence Read-eval-print loop (aka REPL) Reflection
Disadvantages
Later error detection (i.e., at run time)
Examples: JavaScript, Python, Ruby
Combination of Both
Computer Science and Engineering The Ohio State University
A language is not inherently compiled or interpreted
A property of its implementation Sometimes a combination is used:
Compile source code into an intermediate representation (byte code)
Interpret the byte code
Examples of combination: Java, C#
Ruby is (Usually) Interpreted
Computer Science and Engineering The Ohio State University
REPL with Ruby interpreter, irb
>> puts “hello world”
hello world
>> def square(x) x**2 end
=> :square
>> square -4
Delimiters ” ” and ‘ ‘
Interpolation of #{…} occurs (only) inside ” ” “Sum 6+3 is #{6+3}” is “Sum 6+3 is 9”
Custom delimiter with %Q(…) or %q(…) Ranges
0..4 includes start and end value (0,1,2,3,4)
“cab”…”cat” does not include end value Arrays and hashes (later)
Computer Science and Engineering The Ohio State University
Numbers (Integer, Float, Rational, Complex)
83, 0123, 0x53, 0b1010011, 0b101_0011
123.45, 1.2345e2, 12345E-2
2/3r, 4+3i
Comments and Statements
Computer Science and Engineering The Ohio State University
Single-line comments start with # Don’t confuse it with string interpolation!
Multi-line comments bracketed by
=begin =end
Must appear at beginning of line
All statements have a value result
Convention: => to indicate result “Hi #{name}” + “!” #=> “Hi Liam!”
Arithmetic: + – * / % **
/ is either ÷ or div, depending on operands Integer / (div) rounds towards -∞, not 0
% is modulus, not remainder
1 / 3.0 #=> 0.3333333333333333
1 / 3 -1 / 3 -1 % 3
#=> 0 (same as Java)
#=> -1 (not 0 as in Java)
#=> 2 (not -1 as in Java)
Bitwise: ~ | & ^ << >>
5|2 #=>7(ie0b101|0b10)
13 ^ 6 #=> 11 (ie 0b1101 ^ 0b0110) 5 << 2 #=> 20 (ie 0b101 << 2)
Computer Science and Engineering The Ohio State University
1/3 / 1/2
-1/3 / 1/2
1/3r / 1/2r
(1/3r) / (1/2r)
Computer Science and Engineering The Ohio State University
1/3 / 1/2 #=> 0 -1/3 / 1/2 #=> -1
Computer Science and Engineering The Ohio State University
1/3r / 1/2r #=> 1/6r (1/3r) / (1/2r) #=> 2/3r
Operators (Continued)
Computer Science and Engineering The Ohio State University
Comparison: < > <= >= <=>
Last is so-called “spaceship operator” Returns -1/0/1 iff LHS is smaller/equal/larger than RHS
“cab” <=> “da” #=> -1 “cab” <=> “ba” #=> 1
Logical: && || ! and or not
Words have low precedence (below =)
“do_this or die” idiom needs low-binding
x = crazy or raise “problem”
Pseudo Variables
self, the receiver of the current method (recall this)
nil, nothingness (recall null)
__FILE__, the current source file name __LINE__, the current line number
true, false
nil also evaluates to false
0 is not false, it is true just like 1 or -4!
Computer Science and Engineering The Ohio State University
Significance in Names
Computer Science and Engineering The Ohio State University
A variable’s name affects semantics!
Variable name determines its scope
Local: start with lowercase letter (or _)
Global: start with $
$; is the default field separator (space) Instance: start with @
Class: start with @@
Variable name determines mutability
Constant: start with uppercase (Size)
but idiom is all upper case (SIZE)
Many pre-defined global variables exist, e.g.: $/ is the input record separator (newline)
Basic Statements: Conditionals
Computer Science and Engineering The Ohio State University
Classic structure
if (boolean_condition) [then] …
But usually omit ( )’s and “then” keyword
puts “small”
“if” keyword is also a statement modifier x = x + 1 if x < LIMIT
Good for single-line body
Good when statement execution is common case Good for positive conditions
Variations on Conditionals
Computer Science and Engineering The Ohio State University
Unless: equivalent to "if not..."
unless size >= 100
puts “small”
Do not use “else” with “unless” Do not use negative condition (“unless !…”)
Can also be a statement modifier
x = x + 1 unless x >= LIMIT
Good for: single-line body, positive condition
Used for: Guard clause at start of method
raise “unpaid” unless invoice.pending?
Pitfalls with Conditionals
Computer Science and Engineering The Ohio State University
Keyword “elsif” instead of “else if”
puts “small”
elsif x < 20
puts "medium"
puts "large"
If's do not create nested lexical scope if x < 10
puts y #y is defined, but could be nil puts z #NameError: undefined local var z
Case Statements are General
Computer Science and Engineering The Ohio State University
[variable = ] case expression when nil
statements execute if the expr was nil when value # e.g. 0, 'start'
statements execute if expr equals value when type # e.g. String
statements execute if expr resulted in Type
when /regexp/ # e.g. /[aeiou]/
statements execute if expr matches regexp
when min..max
statements execute if the expr is in range
statements
Basic Iteration: While and Until
Classic structure
while boolean_condition [do] ...
Can also be used as a statement modifier
work while awake
Until: equivalent to "while not..."
until i > count
Can also be a used as a statement modifier Pitfall: Modified block executes at least once
sleep while dark # may not sleep at all begin i = i + 1 end while i < MAX
#always increments i at least once
Computer Science and Engineering The Ohio State University
Computer Science and Engineering The Ohio State University
Definition: keyword def
def foo(x, y)
return x + y
Notice: no types in signature
No types for parameters No type for return value
All functions return something
Value of last statement implicitly returned
Convention: Omit explicit return statement
def foo(x, y)
x + y # last statement executed
Function Calls
Dot notation for method call
Computer Science and Engineering The Ohio State University
Math::PI.rationalize() # recvr Math::PI Convention: Omit ( )’s in definition of functions with no parameters
def launch() ... end # bad
def launch ... end # good Paren's can be omitted in calls too!
Math::PI.rationalize
puts "hello world"
Convention: Omit for "keyword-like" calls
attr_reader :name, :age
Note: needed when chaining
foo(13).equal? value
Sample Code Snippet
Computer Science and Engineering The Ohio State University
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
def update
if @user.update_attributes(user_params)
flash[:success] = "Profile updated"
redirect_to @user
render 'edit'
def user_params
params.require(:user).permit(:name, :email,
:password)
Computer Science and Engineering The Ohio State University
Ruby is a general-purpose, imperative,
object-oriented language
Ruby is (usually) interpreted
Familiar flow-of-control and syntax
Some new constructs (e.g., unless, until) Terse (e.g., optional parentheses, optional semicolons, statement modifiers)
程序代写 CS代考 加微信: powcoder QQ: 1823890830 Email: powcoder@163.com