Ruby base2
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Sujet | Bases Ruby (suite) |
| Précédent | Ruby base |
| Console | Irb |
| Voir aussi | Structure de donnees (Ruby) |
Suite des bases du langage Ruby (voir Ruby base) : variables spéciales, types numériques, ranges, tableaux, manipulation de fichiers et classes.
Exécuter du Ruby
ruby -e 'print "Hello Ruby!\n"'
./ruby.rb
irb
Type d'une variable
y = 10
y.kind_of? Integer
y.class
Variables spéciales
$@ # Emplacement de la dernière erreur
$_ # Dernière chaine lue par gets
$. # Dernier numéro de ligne lu par l'interpréteur
$& # Dernière chaine correspondant à une regexp
$~ # Dernier match regexp (tableau de sous-expressions)
$n # n-ième sous-expression du dernier match (= $~[n])
$= # Drapeau d'insensibilité à la casse
$/ # Séparateur d'enregistrement en entrée
$\ # Séparateur d'enregistrement en sortie
$0 # Nom du script ruby en cours d'exécution
$* # Arguments de ligne de commande
$$ # PID de l'interpréteur Ruby
$? # Statut de sortie du dernier processus fils
Variables de classe et d'instance
@@total = 0 # Variable de classe
@total = 0 # Variable d'instance
Nombres
Classes numériques : Integer, Fixnum (petits entiers), Bignum (grands entiers), Float, Rational.
# Conversion en entier
Integer(10.898)
Integer("10898")
Integer(0xA4F5D) # hexadécimal
Integer(01231) # octal
Integer(0b01110101) # binaire
# Conversion en flottant
Float(10)
Float("10.09889")
Méthodes
def multiply(val1, val2)
result = val1 * val2
puts result
end
multiply(2, 10)
Ranges
1..10 # Range de 1 à 10 inclus
1...10 # Range de 1 à 9
(1..10).to_a
('a'..'l').to_a
('cab'..'car').to_a
# Méthodes de range
words = 'cab'..'car'
words.min
words.max
words.include?('can')
words.reject { |subrange| subrange < 'cal' }
words.each { |word| puts "Hello " + word }
# Intervalle
(1..20) === 15
('k'..'z') === 'm'
Conversions : to_s (chaine), to_i (entier), to_a (tableau).
Range dans un case :
score = 70
result = case score
when 0..40 then "Fail"
when 41..60 then "Pass"
when 61..70 then "Pass with Merit"
when 71..100 then "Pass with Distinction"
else "Invalid Score"
end
puts result
Tableaux
days_of_week = Array.new
days_of_week.empty?
days_of_week = Array.new(7)
days_of_week = Array.new(7, "today") # pré-remplissage
Fichiers
5.times { print "Odelay!" }
print "pre", "event", "ual", "ism"
print File.read("/comics.txt")
FileUtils.cp('/comics.txt', '/Home/comics.txt')
Dir["/Home/*.txt"]
# Ajout en fin de fichier
File.open("/Home/comics.txt", "a") do |f|
f << "Cat and Girl: http://catandgirl.com/"
end
print File.read("/Home/comics.txt")
File.mtime("/Home/comics.txt")
File.mtime("/Home/comics.txt").hour
Chargement d'un fichier structuré en table de hachage :
def load_comics(path)
comics = {}
File.foreach(path) do |line|
name, url = line.split(': ')
comics[name] = url.strip
end
comics
end
comics = load_comics('/comics.txt')
Classes
# Hash.new est équivalent à {}
class BlogEntry
attr_accessor :title, :time, :fulltext, :mood
end
entry = BlogEntry.new
entry.title = "Today Mt. Hood Was Stolen!"
entry.time = Time.now
entry.mood = :sick
entry.fulltext = "I can't believe Mt. Hood was stolen!"
Constructeur initialize :
class BlogEntry
def initialize(title, mood, fulltext)
@time = Time.now
@title, @mood, @fulltext = title, mood, fulltext
end
end
Tri et itération :
blog.sort_by { |entry| entry.time }.reverse
blog.each do |entry|
h2 entry.title
p entry.fulltext
end
Time.now - 2.weeks
Boucles et conditions
games = ["Super Mario Bros.", "Contra", "Metroid", "Mega Man 2"]
# unless = if not
unless games.empty?
puts "Games in your vast collection: #{games.count}"
end
# if
if !games.empty?
puts "Games in your vast collection: #{games.count}"
end
# Recherche
search = "Contra"
search_index = games.find_index(search)
if search_index
puts "Game #{search} Found at index #{search_index}."
else
puts "Game #{search} not found."
end
Voir aussi
- Ruby base — première partie
- Structure de donnees (Ruby)
- Chaine de caracteres (Ruby)
- Irb