Échange de données 1

Échange de données 1


1.2 - Syntaxe

1.3 - Syntaxe, suite

1.4 - Exercices

Tableaux

rb
copier
#
## Tableaux
#

tableau = []

tableau = ["james", "mathieu", "lyne", "nicolas"]

tableau = [true, "poutine", 42, [34, 89]]

p tableau
# p est une methode d'affichage pour deboguer,
# affiche le resultat de la methode inspect plutot que la methode to_s
# pratique pour les types structurés et les objets

tableau_2d = [
[],
[]
]

tableau[0] # Pour acceder et assigner = la valeur
tableau.first # .last
tableau[0..3] # Les Range fonctionnent aussi, donne les items 0, 1, 2, 3
# En plus des operations de suppression, insertion, tri, etc.
# https://docs.ruby-lang.org/en/3.0/Array.html

# Parcourir

for color in ["red", "green", "blue"]
print(color.capitalize, " ")
end

# On peut exploiter les Blocks pour manipuler les tableaux

["red", "green", "blue"].each do |color|
print(color.capitalize, " ")
end

# Et combiner les operations
["red", "green", "blue"].select do |color|
!color.include?("r")
end
.each do |color|
print(color.capitalize, " ")
end

# Il existe une syntaxe alternative pour les blocks
# particulierement utilisee si une seule operation est effectuee
["red", "green", "blue"]
.select {|color| !color.include?("r")}
.each {|color| print(color.capitalize, " ")}

Table de hachage

rb
copier
#
## Table de hachage
#

# Permets d'associer une valeur a une cle pour l'identifier
# https://docs.ruby-lang.org/en/3.3/Hash.html

# On peut utiliser une combinaison variee de type pour les cles ET les valeurs
value = "something"

h = {
"key" => value,
2 => "une string",
:id => 7,
Object.new => true,
}

# Il existe une notation simplifiée pour utilisé des Symbol comme clé
{symbol: ""}
# equivaut a
{:symbol => ""}

# On peut ajouter une valeur

h[:new_key] = "James"

#
# Recuperer des données
#

# Un item

h["key"] # "something"
# retourne nil si le cle n'existe pas

h.fetch("other", "some default")

# Et assigner une nouvelle valeur

h["key"] = "something else"

# Toutes les cles/valeurs
# Il existe des raccourcis via .each, .each_key, .each_... pour parcourir avec un Block

h.keys
h.values

# Verifier l'existance

h.key?("patate")
h.value?(42)

Blocks

rb
copier
#
## Blocks
#

# Execute le code fourni dans la contexte provenant par la méthode appelante
# https://docs.ruby-lang.org/en/3.3/syntax/calling_methods_rdoc.html#label-Block+Argument


# 2 blocks "équivalent", un choix stylistique...

# do ... end
# - plusieurs lignes

["red", "green", "blue"].select do |color|
!color.include?("r")
end

# { }
# - expression courte, sur une seule ligne

["red", "green", "blue"].select { |color| !color.include?("r") }

# !!!
# ATTENTION
# do ... end possède un priorité d'opération plus faible

# Priorité ambiguë
puts ["red", "green", "blue"].select do |color|
!color.include?("r")
end
# puts ["red", "green", "blue"].select , do |color| !color.include?("r") end

# Priorité respectée
puts ["red", "green", "blue"].select { |color| !color.include?("r") }

# Expliciter la priorité des opérations
puts (
["red", "green", "blue"].select do |color|
!color.include?("r")
end
)

Go!

Une chaîne de caractères

👀 RTFM

Sortie
Votre texte: Je m'appelle James!

'Je m'appelle James!' contient
19 caractères et 3 mots