Ruby for PHP developers

Preview:

DESCRIPTION

 

Citation preview

By Max Titovmaxtitov.me

Ninja Software Operations

Ruby for PHPDevelopers VS FOR

Objective: learn and compare

▶ What is Ruby and where it is come from?

▶ Why Ruby? ▶ Ruby basics▶ Ruby ecosystem▶ Ruby specialties▶ How to get started?

Facts

▶ First “Hello World” in 1995 (PHP 1995 too)▶ Opensource (PHP too)▶ Inspired by: Perl, Smalltalk, Lisp, Python …▶ Philosophy: Designed for programmer

productivity and fun.

Creator

"I wanted a scripting language that was more powerful than Perl, and more object-oriented than Python. That's why I decided to design my own language.”

Yukihiro (Matz) Matsumoto

Why Ruby?

▶ It’s fun!▶ It’s going to make your better.▶ And definitely it will sabotage what

you believe in.

Similarities

▶ Ruby has exception handling▶ Garbage collector▶ The is fairly large standard library▶ The are classes and access modifiers

Ruby is Dynamic

▶ No need to declare variables

var = “World in hell”var.class #String

var = 1var.class #Fixnum

Ruby is Strong Typed

▶ Like in Java or C# there is no type juggling.You need to convert between types.

a = “1”b = 2a + b #TypeError: can't convert Fixnum into String

a.to_i + b # 3

Everything is an Object

▶ Inspired by SmallTalk▶ Unlike other programming languages

that states the same, Ruby really is.

Everything is an Object

▶ Primitive Types are an objects

10.times {puts “I am sexy and I know it!”}#Output “I am sexy and I know it!”#Output “I am sexy and I know it!”#Output “I am sexy and I know it!”#Output “I am sexy and I know it!”#Output “I am sexy and I know it!”#....(10 times)…

Everything is an Object

▶ Control structures are object methods

class Fixnum < Integerdef – numeric

# subtracting codeend

end

Ruby is Flexible

▶ Existing ruby code could be easily altered.

class Numeric def toSquare

self * selfend

end

2.toSquare# 4

Duck typing

▶ Definition: When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck. (Wikipedia)

Duck typing

What makes object an object?

Answer is a:

Behavior

So, is it a duck?

Swim? YesCan Quack? Yes

Is it a duck?Definitely!

And this?

Swim? YesCan Quack? Yes. Kind of strange, but still it make quack like sound

Is it a duck?Looks like!

How, about this?

Swim? Badly, but yes. Can Quack? Yeah, make Plenty of sounds but, can quack also.

Is it a duck?Sort of weird duck, but yes!

Or, probably this?

Swim? YepCan quack? Can make weird quacksounds.

Is it duck?Trying very hard, soyes

Duck Typing

▶ So, everything that could respond to several criteria's that makes us believethat it’s a duck, is a duck.

Duck Typing in context of Ruby

▶ There is no abstract classes and interfaces.

▶ There is Modules and Mixins.

Modules and Mixins

▶ Modules define reusable pieces of code that couldn’t be instantiated.

▶ Modules provides a namespace and prevent name clashes

▶ Modules could be “mixin” to any class that satisfy conventions described in documentation (Should quack and swim like a duck).

▶ In PHP 5.4 Traits is an equivalent to Mixins

How we usually do this in PHP

Interface ILog{

function write($message)}

EventLog implements ILog{

function write($message){//useful code}

}

How we do this in Ruby

module Log def write

#code endEnd

class EventLog include Log def Prepare endend

Implementing Enumerable

▶ From Enumerable module documentation:The Enumerable mixin provides collection classes with several traversal and searching methods, and with the ability to sort. The class must provide a method “each”, whichyields successive members of the collection.

Implementing Enumerable

class MyCollection include Enumerable def each

#yields result endend

About coding guide lines

▶ Remember the times of Hungarian notation? $f_amount = 100.00; $s_string = “I am definitely a string”;

▶ How many coding guide lines there?▶ PEAR, ▶ Zend, ▶ Wordpress ▶ Your company standard

You. When you get someone's code with different coding guide lines.

Ruby Coding guide lines

Ruby syntaxes mostly dictates coding guidelines:

▶ localVariable▶ @instanceVariable▶ @@classVariable▶ $globalVariable▶ Constant ▶ ClassName▶ method_name

Ruby metaprogramming

▶ DRY – Don’t repeat yourself.▶ But that’s another story

Frameworks

Ruby

▶ Ruby on Rails, Merb

▶ Sinatra▶ Radiant,

Mephisto

PHP

▶ Symfony, Yii, Zend …

▶ Sylex▶ WordPress,

Drupal, Joomla

Tools

Ruby

▶ Ruby Gems ▶ Bundler ▶ TestUnit,

minitest▶ Cucumber,

Rspec, Shoulda

PHP

▶ PEAR, Composer▶ Bash, Composer▶ PHPUnit ▶ Behat

Testing Rocks!

Feel like a Rubier now?

Ruby tutorial 101

Interactive ruby tutorial:▶ http://tryruby.org/

Online course:▶ http://www.coursera.org/course/saas/

Books

▶Programming Ruby (Pick Axe book)By Thomas D., Fowler C., Hunt A.

▶Design Patterns In RubyBy Russ Olsen

▶Search Google for: Learn Ruby

Follow the ruby side we have

cookies

Questions?Ruby for PHP developers

By Max TitovGet examples: www.maxtitov.meGet in touch: eolexe@gmail.com

Twitter: eolexe