2009-11-17 10 views
7

in alcuni giorni sto parlando di un progetto Rails all'università e voglio presentare il pubblico a Ruby.Impressionando Ruby esempio

Voglio mostrare loro uno o due esempi di codice veramente belli per dimostrare quanto sia impressionante Ruby.

Conosci un buon esempio?

migliori saluti

risposta

5

Consiglio vivamente qualcosa con .each, .inject e/o .collect.Per esempio:

# Sum 1,3,5,7,9,11,13 
[1,3,5,7,11,13].inject { |a,b| a+b } 

o

# Print out all of the files in a directory 
Dir.glob('./my_cool_directory/*').each do |file| 
    puts file 
end 

o

# Find the length of all of the strings 
["test", "hello there", "how's life today?"].collect{ |string| string.length } 
1

Si dovrebbe assolutamente mostrare loro gamma di Dwemthy, è solo così molto eloquente del potere che si trova all'interno del meta programmazione in Ruby.

Find it here!

+0

Questo esempio è troppo complesso. Dovrebbe essere composto da max. 4-5 linee. – brainfck

+2

Mi piace come, in pratica ogni tutorial di Ruby, senza eccezioni, puoi quasi sentire i tentacoli della follia protendersi per trascinare il lettore nell'incubo schizofrenico dell'autore. – Juliet

+1

@Julet: Chiaramente hai letto solo tutorial scritti o ispirati da _why. – Pesto

2
irb(main):007:0> 2**2048 
=> 32317006071311007300714876688669951960444102669715484032130345427524655138867 
89089319720141152291346368871796092189801949411955915049092109508815238644828312 
06308773673009960917501977503896521067960576383840675682767922186426197561618380 
94338476170470581645852036305042887575891541065808607552399123930385521914333389 
66834242068497478656456949485617603532632205807780565933102619270846031415025859 
28641771167259436037184618573575983511523016459044036976132332872312271256847108 
20209725157101726931323469678542580656697935045997268352998638215525166389437335 
543602135433229604645318478604952148193555853611059596230656 

provare 2 ** 20000 o qualsiasi altro numero ridicolo di grandi dimensioni.

6

Mostrare loro come si trasformano 50 linee brutte di codice sporco in 3 punti puliti di codice molto facile da capire. (Essere la prima riga un commento)

Non mostrare quanto sei figo con il rubino. Ma quanto saranno belli se usano il rubino :)

+1

+1 per il secondo paragrafo. –

+0

Buona idea!In realtà volevo mostrarli, quanto potevano essere fantastici ;-) – brainfck

+0

+1/concordare con The Wicked Flea –

4

Sono impressionato da ciò che può essere fatto con tweetstream. È così facile monitorare gli argomenti di tendenza.

installare con:

gem sources -a http://gems.github.com 
gem install intridea-tweetstream 

Ecco il codice demo:

#!/usr/local/bin/ruby 

if ARGV.size==1 
    keyword = ARGV.shift 
else 
    puts 'tweetmon usage: tweetmon <keyword>' 
    exit 1 
end 

require 'yaml' 
require 'rubygems' 
require 'tweetstream' 

config = YAML::load(File.open(File.expand_path('~/.twitter'))) 
user =config['username'] 
password =config['password'] 

TweetStream::Client.new(user,password).track(keyword) do |status| 
    puts "[#{status.created_at}-#{status.user.screen_name}] #{status.text}" 
end 

È necessario creare un file chiamato .twitter nella directory principale dell'utente, della forma:

username: my-twitter-username 
password: my-twitter-password 

Nota come Ruby legge questa configurazione in sole 4 righe (incluso lo yaml.)

lo si esegue in questo modo:

ruby tweetmon.rb keyword-to-be-monitored 

(ricordare che è necessario per sfuggire # su Mac/Linux, ad esempio: tweetmon.rb \#devdays)

Da un tale semplice frammento si possono fare cose come contare quanti molte volte ogni individuo contribuisce, acquisisce segmenti del tweettream in un file, ... ogni sorta di cose da quel punto di partenza ...

+0

Questo è in realtà un _library_ veramente interessante. Non c'è nulla che davvero urla - "Ruby ROCKS!". –

2

Se hai familiarità con Java, crea un elenco di stringhe, ordinalo con il tuo proprio comparatore personalizzato (lunghezza della stringa) e stampare la lista. Fare lo stesso in Ruby ...

1

Rubino piace a me perché spesso mi permette di ottenere fare quello che voglio ottenere fatto, piuttosto che spendere una grande quantità di tempo "impostare" la soluzione. Così, alcuni esempi:

sommare i numeri non negativi nell'array [-1, 3, -10, 0, 5, 8, 16, -3,14159]

[-1, 3, -10, 0, 5, 8, 16, -3.14159].select { |x| x > 0 }.inject { |acc, x| acc + x } 

Rispetto alle un modulo comune per altre lingue:

sum = 0; 
foreach (x in [-1, 3, -10, 0, 5, 8, 16, -3.14159]) { 
    if(x > 0) sum += x; 
} 
return x; 

semplice la gestione delle eccezioni

x = method_that_might_raise_exception() rescue nil 

Rispetto a:

try { 
    x = method_that_might_raise_exception() 
} catch (Exception) { 
    x = nil 
} 

Certo, si può decidere di fare di più con le eccezioni che vengono gettati, e Ruby si permette, ma quando si vuole mantenere le cose semplici, Ruby non ostacolare.

classi aperte di Ruby sono un tema pulito, anche se possono essere oggetto di abusi:

class Array 
    def sum_of_squares 
    map { |x| x * x }.inject { |acc, x| acc + x } 
    end 
end 

[1, 3, 5, 9].sum_of_squares 

C'è anche la ricca tema della meta-programmazione, ma che potrebbe essere troppo per un'introduzione a Ruby? Spero che qualcosa qui ti sia stato utile, e mi piacerebbe mettere in secondo piano il sentimento di Graffic.

0

vorrei mostrare come sia semplice creare bello dsl di - method_missing in particolare è davvero semplice da comprendere ma molto potente e ti permette di fare cose davvero interessanti.