Ruby for .NET developers

Preview:

DESCRIPTION

Introduction to Ruby for .NET developers.Learn and compare

Citation preview

By Max Titovmaxtitov.me

Ninja Software Operations

Ruby for .NETDevelopers VS FOR

Objective: learn and compare

▶ What is Ruby? ▶ Ruby basics▶ Ruby specialties▶ Ruby ecosystem▶ So why Ruby?▶ How to get started?

What is Ruby?

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

Facts

▶ First “Hello World” in 1995 (.NET 2002, C# 2001)

▶ Ruby is opensource▶ Inspired by: Perl, Smalltalk, Lisp, Python …▶ Philosophy: Designed for programmer

productivity and fun.

Ruby Basics

First taste of Ruby codeclass Apple NAME = "Apple" attr_accessor :size, :color

def initialize size @size = size end

def taste puts "Sweet #{@color} #{NAME} of size #{size}" endend

apple = Apple.new 'big'apple.color = 'red' apple.taste # Sweet red Apple of size big

I know, feels like

Similarities

▶ Large standard library (Not so big as .NET Framework but feels enough)

▶ The are classes, methods, variables, properties.

▶ Access control modifiers▶ Closures (Lambdas)▶ Exceptions▶ Garbage collector

Ruby is Dynamic

▶ No need to declare variables

var = "Ruby is Dynamic"var.class #Stringvar = 1var.class #Fixnum

Ruby is Strong Typed

▶ Like in .NET there is no type juggling.You need to convert between types.

a = "1"b = 2a + b #TypeError: can`t convert Fixnum into Stringa.to_i + b # 3

Everything is an Object

▶ All classes are drived from base class named Class

▶ Unlike .NET there is no structs

Everything is an Object

▶ So even primitive Types are an objects

10.times {puts "I am sexy and I know it!"}# I am sexy and I know it!# I am sexy and I know it!# I am sexy and I know it!# I am sexy and I know it!# I am sexy and I know it!# ....(10 times)....

Everything is an Object

▶ Operators are simply object methods.

class Fixnum < Integer def + numeric # sum code endend

Ruby is Flexible

▶ Core Ruby code could be easy altered.

class Numeric def toSquare self * self endend

2.toSquare # 4

Ruby is Concise

▶ Properties could be defined in old school way

class Person #getter def name @name end

#setter def name= name @name = name endend

Ruby is Concise

▶ Or in more convenient style

class Person #getter and setter, for several properties attr_accessor :name , :nickname

#getter attr_reader :gender

#setter attr_writer :ageend

Some questions to you

▶ Constants, start from capital or not?▶ Field names, prefixed with underscore or

not?▶ How many coding guide lines is there

actually?▶ Microsoft Framework Design Guidelines▶ IDesign C# coding standards▶ Your company coding standard▶ Your own coding standard. (Professional

choice)

Ruby is Strict

▶ Autocracy took over the Ruby community.

Ruby is Strict

Ruby syntaxes mostly dictates naming conventions:

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

Ruby is Strict

▶ 95% of ruby developers use same code style.

▶ Other 5% are a new comers, that will adept code conventions soon.

Forever alone in the world of naming conventions.

So in Ruby world you don’t feel like:

And Ruby Is Forgiving

▶ Parenthesis are optional▶ No need in semicolon at the end of

each line

Ruby specialties

Duck typing

What really makes object an object?How can I recognize that object is a

Duck?

Duck typing

Behavior

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)

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 still yes!

Or, probably this?

Swim? YepCan quack? Can make weird quacksounds.

Is it duck?Trying very hard

Duck Typing

▶ So, everything that could respond to several criteria's that makes us believethat object is a duck, can be recognized as a duck.

▶ But what that means from programmer perspective and how to implement it?

What is told you there is no abstract classes and interfaces?

But there is Modules and Mixins!

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

▶ Modules provides a namespace functionality and prevent name clashes

Namespaces in Rubymodule System module Windows module Forms module MessageBox def MessageBox.Show message puts message

end end end endend

include System::Windows::FormsMessageBox.Show 'Namespacing in ruby’

Modules and Mixins

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

▶ In .net Mixins using ReMix http://remix.codeplex.com/

Lets see how it works by implementing Enumerable

In .NET we usually do this

▶ We need to implement two interfaces▶ IEnumerable▶ IEnumerator

In .NET we usually do thisclass People : IEnumerable{

IEnumerator GetEnumerator(){

return (IEnumerator) new PeopleEnumerator();}

}

public class PeopleEnumerator : IEnumerator{

public Person Current;public void Reset();public bool MoveNext();

}

public class Person{}

How it’s done in Ruby

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

How it’s done in Ruby

class MyCollection include Enumerable def each #yields result endend

That was easy!

But static typing and interfaces make me safe!

Really?

In Ruby world developers used to write unit tests for this

Document and organize their code better

# The <code>Enumerable</code> mixin provides collection classes with# several traversal and searching methods, and with the ability to# sort. The class must provide a method <code>each</code>, which# yields successive members of the collection. If# <code>Enumerable#max</code>, <code>#min</code>, or# <code>#sort</code> is used, the objects in the collection must also# implement a meaningful <code><=></code> operator, as these methods# rely on an ordering between members of the collection.module Enumerable # enum.to_a -> array # enum.entries -> array

# Returns an array containing the items in <i>enum</i>. # # (1..7).to_a #=> [1, 2, 3, 4, 5, 6, 7] # { 'a'=>1, 'b'=>2, 'c'=>3 }.to_a #=> [["a", 1], ["b", 2], #

["c", 3]] def to_a() #This is a stub, used for indexing end

Closures in Ruby

▶ Closures in Ruby called Blocks

names = ["Max", "Alex", "Dima"].map do |name| name.downcaseendputs names# max# alex# dima

Ruby metaprogramming

▶ Metaprogramming is the writing of computer programs that write or manipulate other programs (or themselves) as their data, or that do part of the work at compile time that would otherwise be done at runtime. (Wikipedia)

▶ Keep programs DRY – Don’t repeat yourself.

Where is example?

In all cinemas of your town Next time “Ruby

metaprogramming”

Ruby Ecosystem

Frameworks

Ruby

▶ Ruby on Rails, Merb

▶ Sinatra▶ Radiant,

Mephisto

.NET

▶ ASP.NET MVC, FunuMVC

▶ Nancy ▶ Umbraco,

DotNetNuke

Tools

Ruby

▶ Any TextEditor (RubyMine IDE)

▶ Rake▶ Gems ▶ Gems and

Bundler ▶ TestUnit,

minitest▶ Cucumber,

RSpec, Shoulda

.NET

▶ Visual Studio, MonoDevelop

▶ MSBuild, NAnt▶ Dll’s▶ NuGet▶ MSUnit, NUnit … ▶ NSpec, SpecFlow

So Why Ruby?

So Why Ruby?

▶ All hot stuff is here ▶ Benefits of interpreted language▶ Quick prototyping with Rails▶ It’s fun and it’s going to make your

better!▶ And definitely it will sabotage what

you believe in.

Feel more Rubier now? I hope so

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

Yep, we really do!

Questions?Ruby for .NET developers

By Max TitovGet presentation: www.maxtitov.me

Get in touch: eolexe@gmail.comTwitter: eolexe