
French: 
Dans cette séquence, nous
allons parler des boucles dans Pharo.
Les boucles sont des messages
qu'on va envoyer à des objets.
En fait, il existe plein de
types de boucles différents.
C'est des messages qu'on va
envoyer soit à des nombres, à
des collections, voire même
à des blocks et ça sera dans
certains cas des messages
d'itération sur les éléments d'une
collection, par exemple.
Voilà un exemple, on
envoie le message timesRepeat
à l'entier 4 et on va lui
passer en paramètre un block.
Si vous vous rappelez, on a vu les
blocks dans la séquence précédente.
On a un block qui commence
ici et qui se termine ici.
Ce message va permettre de
répéter l'évaluation de ce
block plusieurs fois, en
l'occurrence quatre fois dans
cet exemple puisque le
receveur du message, c'était 4.
Il existe d'autres types de
messages pour effectuer des boucles.
Par exemple ici dans cet
exemple, c'est le message to: do:.
Le message to:do est
défini sur la classe number.

Japanese: 
このセッションでは
Pharo でのループについてお話します。
Pharo では
ループはオブジェクトへのメッセージです。
ループには様々な種類がありますが
それらは数やコレクションや
ブロックへのメッセージです。
コレクションの要素を数え上げる
イテレータの場合もあります。
これがその例です。
timesRepeat: メッセージを
整数 4 へ送ります。
引数としてブロックを渡します。
ブロックについては
前のセッションで学びました。
ブロックはここから始まってここで終わります。
このメッセージはこのブロックを
何回か、この場合は4回、評価します。
レシーバが 4 だからです。
ループを作るメッセージは他にもあります。
この例では
to:do: です。

English: 
In this session,
we'll talk about loops in Pharo.
In Pharo, loops are messages
sent to objects.
There are many types of loops.
They're messages
sent to numbers, collections,
or even to blocks.
In some cases, they are iterators
over the elements of a collection.
This is an example:
I send the message timesRepeat:
to the integer 4.
I pass it a block as a parameter.
We studied blocks
in the previous course.
This blocks starts here and ends there.
This message repeats
the evaluation of this block
several times: in this example,
four times
as the receiver is 4.
There are other types of messages
to create loops.
In this example,
it's the message to:do:.

Spanish: 
En esta sesión,
Hablaremos de ciclos en Pharo.
En Pharo, los ciclos son mensajes
enviado a los objetos
Hay muchos tipos de ciclos.
Son mensajes
enviado a números, colecciones,
o incluso a bloques.
En algunos casos, son iteradores
sobre los elementos de una colección.
Esto es un ejemplo:
Envío el mensaje timesRepeat:
al entero 4.
Le paso un bloque como parámetro.
Estudiamos bloques
en el curso anterior.
Este bloque comienza aquí y termina allí.
Este mensaje repite
la evaluación de este bloque
varias veces en este ejemplo,
cuatro veces
como el receptor es 4.
Hay otros tipos de mensajes
para crear ciclos.
En este ejemplo,
es el mensaje to:do:.

Japanese: 
to:do: メッセージは
Numberクラスで定義されています。
この場合も引数としてブロックを渡します。
このメッセージの最後の引数としてです。
このブロックは何回か
ループ変数を伴って評価されます。
ループ変数はレシーバーから
メッセージの第一引数の値までの値を取ります。
例えば
丁度こんな例題があります。
整数 1 に to:do: メッセージを送ります。
ブロックの中では
ブロックの引数を表示します。
ループでの各 i の値です。
Transcript に
1から100までの全ての整数が表示されます。
他にもループを作るメッセージがあります。
例えば to:by:do: メッセージです。
1以外の増分でループすることができます。
増分の大きさを制御することができるのです。
この例ではループするごとに 3 ずつ増えていきます。

English: 
The message to:do:
is defined on the class Number.
I'll also pass it a block
as a parameter,
the last argument of the message.
This block gets executed
a number of times
with a loop cursor
that goes from the receiver
to the first argument of the message.
For instance,
with the exact same example:
I send the message to:do:
to the integer 1.
In the block,
you display the parameter of the block,
the parameter i at each loop.
In the transcript, you have all
the integers between 1 and 100.
There are other messages
to create loops.
For instance, the message to:by:do
to increment by more than 1.
You control the scale of the increment.
You can increment by 3 in this example.

Spanish: 
El mensaje to:do:
se define en la clase Número.
También le pasaré un bloque
como un parámetro,
el último argumento del mensaje.
Este bloque se ejecuta
un número de veces
con un cursor de ciclo
que va desde el receptor
al primer argumento del mensaje.
Por ejemplo,
con el mismo ejemplo:
envío el mensaje to:do:
al entero 1.
En el bloque,
usted muestra el parámetro del bloque,
el parámetro i en cada ciclo.
En el Transcript, tiene todos
los enteros entre 1 y 100.
Hay otros mensajes
para crear ciclos.
Por ejemplo, el mensaje to:by:do
para incrementar en más de 1.
Usted controla la escala del incremento.
Puede incrementar en 3 en este ejemplo.

French: 
Et puis, on va lui passer
également en paramètre un block
qui est le dernier
argument du message et ce block va
être exécuté un certain
nombre de fois avec un curseur de
boucle qui varie depuis le
receveur jusqu'au premier
argument du message.
On a un exemple ici, si on
reprend exactement le même
exemple, on va envoyer
le message to:do à l'
entier 1. Dans le
block, on va afficher le
paramètre du block, le
paramètre i à chaque tour de boucle.
On voit que dans le
Transcript, on a bien tous les
entiers qui ont été
affichés entre 1 et 100.
Il existe d'autres messages
pour effectuer des boucles.
Par exemple, on a le
message to:by:do: pour faire des
incréments de plus que par 1.
On fait des incréments ici
pour contrôler de combien on
fait l'incrément, on peut faire des
incréments par 3 ici dans cet exemple.

English: 
With every loop,
i takes values by step of 3.
You can see what happens
when you execute this bit of code.
You can see i went from 1 to 100
with an increment of 3 each time.
There are also iterators
to create loops.
Iterators are messages
that must be sent to collections,
to collection objects.
There are many types such as do:.
do: iterates
over every element of a collection.
collect: iterates
over the elements of a collection
but also collects the results
to put them in a new collection.
select: selects matching elements
in a collection:
you build a new collection
with those you selected.
reject: rejects the elements
of a collection you don't want.
detect: helps to determine

French: 
À chaque tour de boucle, i va
prendre des valeurs de 3 en 3.
On voit l'exemple ici,
cette fois quand on a exécuté ce
morceau de code, on voit
bien que i a bien varié de 1 à
100, mais avec un
incrément de 3 à chaque fois.
Il existe maintenant aussi des
itérateurs pour effectuer des boucles.
Les itérateurs sont des
messages plutôt à envoyer à des
objets Collection. Il en
existe de toutes sortes.
On a par exemple do: qui
permet d'itérer sur chacun des
éléments d'une collection.
Collect: qui permet à la fois
d'itérer sur les
éléments d'une collection, mais
également de récupérer, de
collecter les résultats pour
les mettre dans une
nouvelle collection.
Select: qui permet de
sélectionner un ensemble d'éléments
à l'intérieur d'une
collection, donc de construire une
nouvelle collection uniquement
avec ceux qu'on aurait sectionnés.
Reject: qui permet
d'éliminer les éléments qu'on ne
voudrait pas dans une
collection. Detect: qui permet de
savoir si un élément existe
dans une collection donnée.

Japanese: 
i は 3 ずつの増分の値を取ります。
このコード片を実行した時に
何が起こるでしょうか。
i が 1 から 100 まで
3 ずつの増分で進むのがわかるでしょう。
イテレーターもループを作ります。
コレクションのイテレーターはコレクションに送られるメッセージです。
あらゆる種類のコレクションにあります。
色々な種類のイテレーターがあります。
例えば do: です。
do: はコレクションの各要素を数え上げます。
collect: もコレクションの要素を数え上げますが
結果を集めて
新しいコレクションとします。
select: はコレクションの中から
マッチする要素を選択します。
選択された要素からなる
新しいコレクションを作ります。
reject: はコレクションの要素から
必要ないものを取り除いたコレクションを作ります。
detect: はコレクションの中に
特定の要素が存在するかどうかを

Spanish: 
Con cada ciclo,
toma valores con incrementos de 3.
Puede ver que pasa
cuando ejecuta este segmento de código.
Puede ver que fui de 1 a 100
con un incremento de 3 cada vez.
También hay iteradores
para crear ciclos.
Los iteradores son mensajes
que debe enviarse a colecciones,
a objetos de colección
Hay muchos tipos como do:.
do: itera
sobre cada elemento de una colección.
collect: itera
sobre los elementos de una colección
pero también recoge los resultados
para ponerlos en una nueva colección.
select: selecciona los elementos coincidentes
en una colección:
construye una nueva colección
con los elementos seleccionados
reject: rechaza los elementos
de una colección que no desea.
detect:​​ ayuda a determinar

English: 
whether an element exists
in a given collection, etc.
We'll study some of these
in the next slides.
do:, for instance,
is the most common message.
You send the message do:
to a collection and pass it a block.
With every loop,
the parameter of the block, :each,
receives the first element
of the collection,
then the second, until the final element
of the collection.
This is an example:
it's a defined collection.
A reminder of the syntax: open with #(
and close with )
for literal collections.
This collection contains four integers:
15, 10, 19, and 68.
You send the message do:
to the collection and pass it a block.
i, the parameter of the block,
takes the value 15 on the first loop,
then 10, 19, and 68.

Japanese: 
見定める等のことに使われます。
次のスライドで
これらのうちいくつかを学びましょう。
例えば do: は最も一般的なメッセージです。
コレクションに do: メッセージを
ブロックを引数として送ります。
各ループでは
ブロックの引数 each は
コレクションの最初の要素を受け取り
次に2番目の要素、という具合に
最後の要素まで繰り返していきます。
これが例です。
コレクションが定義されています。
構文の復習です。
#( から ) の部分はコレクションのリテラルです。
このコレクションは4つの整数を格納しています。
15、10、19 そして 68 です。
do: メッセージをコレクションに
ブロックを引数として送ります。
i はブロックの引数で
最初はまず 15 を
次に 10、19、そして68 を受け取ります。

Spanish: 
si existe un elemento
en una colección dada, etc.
Estudiaremos algunos de estos
en las próximas diapositivas.
do:, por ejemplo,
es el mensaje más común.
Envía el mensaje:
a una colección y lo pasa a un bloque.
Con cada ciclo,
el parámetro del bloque :each,
recibe el primer elemento
de la colección,
luego el segundo, hasta el elemento final
de la colección
Esto es un ejemplo;
es una colección definida.
Un recordatorio de la sintaxis:
abrir con #(
y cierra con )
para colecciones literales
Esta colección contiene cuatro enteros:
15, 10, 19 y 68.
Envía el mensaje:
a la colección y lo pasa a un bloque.
i, el parámetro del bloque,
toma el valor 15 en el primer ciclo,
luego 10, 19 y 68.

French: 
On va en voir quelques-uns
dans la suite de ces slides.
Par exemple, do: qui est
finalement le message le plus
courant qu'on utilise. On va
envoyer le message do: à une
collection et on va
lui passer un block.
À chaque tour de boucle, le
block, le paramètre du block,
ici each: va recevoir
d'abord le premier élément de la
collection, ensuite le second,
jusqu'au dernier élément de la collection.
Voici un exemple, ici on a
une collection qui est définie.
Je vous rappelle que la
syntaxe, c'est dièse, parenthèse
et puis on termine par une
parenthèse pour les collections littérales.
Cette collection contient
quatre entiers: 15, 10, 19, 68.
On envoie le message do: à cette
collection, on lui passe un block.
I, qui est le paramètre du block, va
prendre au premier tour de boucle
la valeur 15 ensuite 10, 19 et 68.

English: 
This is another message: whileTrue:.
whileTrue: can also create loops,
but it is a message you send to a block.
It is defined over the class Block.
This is the receiver block.
There's a block of arguments here.
I give you a concrete example
from the class Color.
This is whileTrue:.
In the receiver block,
there's a condition.
The block is evaluated to true or false.
Depending on the evaluation
of the first block, the receiver,
you trigger or don't trigger
the execution
of the second block,
which is the parameter of whileTrue:.
There's another version of whileTrue:.
It's the method whileTrue
without a parameter.
It takes the receiver block
and evaluates it.
If it returns true or false,
it is re-evaluated once more, and so on.
You re-evaluate the block
as long as its value is true.

Japanese: 
また別のメッセージもあります。 whileTrue: です。
whileTrue: もループを作ります。
ただしブロックに送るメッセージです。
Blockクラスで定義されています。
これがレシーバーのブロックです。
こちらには引数のブロックがあります。
Colorクラスからの実例をお見せします。
これが whileTrue: です。
レシーバーのブロックには
条件が書かれています。
このブロックを評価すると
true または false になります。
レシーバーである最初のブロックの評価結果に応じて
引数である2番目のブロックを
実行するかどうかが決まります。
これは別の whileTrue です。
この whileTrue は引数なしのメソッドです。
この whileTrue はレシーバーのブロックを評価して
true または false に応じて
また評価するかどうかを決めます。
評価結果が true であり続ける限りずっと
ブロックが再評価されます。

Spanish: 
Este es otro mensaje: whileTrue:.
whileTrue: también puede crear ciclos,
pero es un mensaje que se envía a un bloque.
Se define en la clase Bloque.
Este es el bloque receptor.
Aquí hay un bloque de argumentos.
Le doy un ejemplo concreto
de la clase Color.
Esto es whileTrue:.
En el bloque receptor,
hay una condición
El bloque se evalúa como verdadero o falso.
Dependiendo de la evaluación
del primer bloque, el receptor,
usted desencadena o no desencadena
la ejecución
del segundo bloque,
que es el parámetro de whileTrue:.
Hay otra versión de whileTrue:.
Es el método whileTrue
sin un parámetro
Toma el bloque receptor
y lo evalúa.
Si devuelve verdadero o falso,
se vuelve a evaluar una vez más, y así sucesivamente.
Vuelva a evaluar el bloque
siempre que su valor sea verdadero.

French: 
Voici un autre message qui
est whileTrue: qui permet
également d'effectuer des boucles.
whileTrue:, c'est un message
qu'on va envoyer à un block,
donc c'est un message
défini sur la classe block.
On a le block receveur qui
est ici et puis on a un block
d'argument qui est ici.
Je vous donne un exemple
concret issu de la classe Color.
On a ici un whileTrue:.
On a le block receveur.
Dans le block receveur, on
a une condition: ce block va
s'évaluer à une
condition, true ou false.
En fonction de
l'évaluation de ce premier block, le
receveur, on va déclencher
l'exécution ou pas du block
argument qui est le deuxième block,
le paramètre de la méthode whileTrue:.
Il existe une variation de whileTrue
sans paramètres qui prend le
block receveur, qui l'évalue
et si ce block s'évalue à
vrai ou à faux, il est réévalué
une fois supplémentaire.
En fait, on va réévaluer le
block tant qu'il s'évalue à vrai.

Japanese: 
whileTrue の双子のメッセージに
whuileFalse があります。
それぞれ引数のあるものと
ないものがあります。
クラスやブロックによって
様々なバリエーションがあります。
まとめると
このコースでは
Pharo ではループが通常のメッセージとして
表現されることを見てきました。
それらのメッセージはオブジェクトに送られます。
整数はコレクションやブロックなど。
それらを使って実に様々なループを
作ることができます。
その気になれば
あなたが新しいループを追加することもできます。

English: 
You have the twins of whileTrue
with the methods whileFalse,
with and without parameters.
Every variation exists
when it comes to classes and blocks.
To sum up, in this course,
we saw that loops are expressed
as normal messages in Pharo.
They're sent to objects
(integers, collections, blocks...).
You can use them to build
plenty of different loops.
You can even add some if you wish.

French: 
On a exactement les
pendants de whileTrue: avec les
méthodes de whileFalse sans
paramètres et avec paramètres.
Toutes les variations
existent en fait dans les classes
sur les blocks.
En résumé, sur cette
séquence, on a vu que les boucles en
Pharo sont exprimées comme
des messages normaux envoyés à
des objets, que ce soit des
entiers, des collections, des blocks.
Avec ça, on peut
construire énormément de boucles
différentes et même en
rajouter si on en a envie.

Spanish: 
Tienes los gemelos de whileTrue
con los métodos whileFalse,
con y sin parámetros
Cada variación existe
cuando se trata de clases y bloques.
En resumen, en este curso,
vimos que los ciclos se expresan
como mensajes normales en Pharo.
Se envían a los objetos
(enteros, colecciones, bloques ...).
Puede usarlos para construir
muchos ciclos diferentes
Incluso puede agregar algunos si lo desea.
