Julia Language
pour les boucles
Recherche…
Syntaxe
- pour i in iter; ...; fin
- tandis que cond; ...; fin
- Pause
- continuer
- @parallel (op) pour i in iter; ...; fin
- @parallel pour i in iter; ...; fin
- @goto label
- @label label
Remarques
Si cela rend le code plus court et plus facile à lire, envisagez d'utiliser des fonctions d'ordre supérieur, telles que map
ou filter
, plutôt que des boucles.
Fizz Buzz
Un cas d'utilisation courant pour une boucle for
consiste à parcourir une plage ou une collection prédéfinie et à effectuer la même tâche pour tous ses éléments. Par exemple, nous combinons ici une boucle for
avec une instruction if
- elseif
- else
:
for i in 1:100
if i % 15 == 0
println("FizzBuzz")
elseif i % 3 == 0
println("Fizz")
elseif i % 5 == 0
println("Buzz")
else
println(i)
end
end
Ceci est la question d'interview classique de Fizz Buzz . La sortie (tronquée) est:
1
2
Fizz
4
Buzz
Fizz
7
8
Trouver le plus petit facteur premier
Dans certaines situations, on peut vouloir revenir d'une fonction avant de terminer une boucle entière. La déclaration de return
peut être utilisée pour cela.
function primefactor(n)
for i in 2:n
if n % i == 0
return i
end
end
@assert false # unreachable
end
Usage:
julia> primefactor(100)
2
julia> primefactor(97)
97
Les boucles peuvent également être terminées tôt avec l'instruction break
, qui termine uniquement la boucle englobante au lieu de la fonction entière.
Itération multidimensionnelle
Dans Julia, une boucle for peut contenir une virgule ( ,
) pour spécifier une itération sur plusieurs dimensions. Cela agit de la même manière que l'imbrication d'une boucle dans une autre, mais peut être plus compacte. Par exemple, la fonction ci-dessous génère des éléments du produit cartésien de deux itérables:
function cartesian(xs, ys)
for x in xs, y in ys
produce(x, y)
end
end
Usage:
julia> collect(@task cartesian(1:2, 1:4))
8-element Array{Tuple{Int64,Int64},1}:
(1,1)
(1,2)
(1,3)
(1,4)
(2,1)
(2,2)
(2,3)
(2,4)
Toutefois, l'indexation sur des tableaux de toute dimension doit être effectuée avec eachindex
, et non avec une boucle multidimensionnelle (si possible):
s = zero(eltype(A))
for ind in eachindex(A)
s += A[ind]
end
Boucles de réduction et parallèles
Julia fournit des macros pour simplifier la distribution des calculs sur plusieurs machines ou travailleurs. Par exemple, le calcul suivant calcule la somme d'un certain nombre de carrés, éventuellement en parallèle.
function sumofsquares(A)
@parallel (+) for i in A
i ^ 2
end
end
Usage:
julia> sumofsquares(1:10)
385
Pour plus d'informations sur ce sujet, consultez l' exemple sur @parallel
dans la rubrique Processus parallèle.