2009-11-17 6 views
7

en algunos días Estoy dando una charla sobre un proyecto de Rails en la universidad y quiero presentarle a la audiencia a Ruby.Impresionante ejemplo de Ruby

Quiero mostrarles uno o dos ejemplos de código realmente bonitos para demostrar lo increíble que es Ruby.

¿Conoces un buen ejemplo?

Saludos

Respuesta

5

Sugeriría algo con .each, .inject y/o .collect.Por ejemplo:

# 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

Se les debe mostrar totalmente gama de Dwemthy, Es tan muy revelador del poder que se encuentra dentro de la programación meta en Ruby.

Find it here!

+0

Este ejemplo es demasiado complejo. Debe consistir en max. 4-5 líneas – brainfck

+2

Me gusta cómo, en casi todos los tutoriales de Ruby sin excepción, casi se puede sentir que los tentáculos de la locura se extienden para llevar al lector a la pesadilla esquizofrénica del autor. – Juliet

+1

@Julet: Claramente solo has leído tutoriales escritos o inspirados por _why. – Pesto

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

tratar 2 ** 20000 o cualquier otra gran cantidad ridícula.

6

Muéstreles cómo se transforman 50 líneas feas de código sucio en 3 líneas limpias de código muy fácil de entender. (Siendo la primera línea un comentario)

No muestres lo genial que eres con ruby. Pero qué bueno serán si usan ruby ​​:)

+1

+1 para el segundo párrafo. –

+0

¡Buena idea!De hecho, quería mostrarles lo buenos que podían ser ;-) – brainfck

+0

+1/estoy de acuerdo con The Wicked Flea –

4

Estoy impresionado con lo que se puede hacer con tweetstream. Es muy fácil monitorear temas de tendencias.

instalar con:

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

Aquí está el código de demostración:

#!/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 

Es necesario crear un archivo llamado .twitter en el directorio raíz del usuario, de la forma:

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

Observe cómo Ruby lee esta configuración en solo 4 líneas (incluido el yaml require)

ejecuta así:

ruby tweetmon.rb keyword-to-be-monitored 

(Recuerde que tiene que escapar # en Mac/Linux, por ejemplo: tweetmon.rb \#devdays)

Desde un simple fragmento tal que puede hacer cosas como contar el muchas veces cada individuo contribuye, captura segmentos de tweetstream en un archivo, ... todo tipo de cosas desde ese punto de partida ...

+0

Esa es realmente una _library_ genial. No hay nada que realmente grite: "¡Ruby ROCKS!". –

2

Si está familiarizado con Java, cree una lista de cadenas, ordénelo con su propio comparador personalizado (longitud de cadena) e imprime la lista. Haz lo mismo en Ruby ...

1

Rubí me atrae porque a menudo me permite conseguir hacer lo que quiero hacer, en lugar de gastar una gran cantidad de tiempo "configurar" la solución. Así, algunos ejemplos:

Sum los números no negativos de la matriz [-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 } 

En comparación con una forma común a otros idiomas:

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

simple manejo de excepciones

x = method_that_might_raise_exception() rescue nil 

En comparación con:

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

Por supuesto, es posible que desee hacer más con las excepciones que se tiran, y Ruby le permite, pero cuando se quiere mantener las cosas simples, Ruby no se interpone en el camino.

clases abiertas de Ruby son un tema limpio, a pesar de que pueden ser objeto de abuso:

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

[1, 3, 5, 9].sum_of_squares 

También está el tema de la rica meta-programación, pero que podría ser demasiado para una introducción a Ruby? Espero que algo aquí sea útil para ti, y me gustaría destacar el sentimiento de Graffic.

0

Me mostraré lo fácil que es crear buen DSL - Method_Massing en particular es muy simple de entender pero muy poderoso, y te permite hacer cosas geniales.

Cuestiones relacionadas