Julia makes only two looping constructs available to you,
for. In this article, I shall quickly go over them, as they behave as they generally do in other languages.
Looping with While
In general, blocks of code in Julia are terminated with the
end keyword. Thus, the indentation of code doesn’t matter.
So, for example, the code below is perfectly valid, albeit a bit hard to read:
julia> i=0;while i<=42 print(i) i+=1 end #Following is the output 0123456789101112131415161718192021222324252627282930313233343536373839404142
You can also use break and continue as you would use in any other language:
julia> while true print("Ω👌") break end #Below output shows that this loop runs only once Ω👌
Looping using for
while loop is quite vanilla,
for loop is where the party’s at, and it has a functional theme, although everyone’s invited. First of all, our usual expectations are satisfied:
julia> for k in 1:42 print("$k→") end #Output below 1→2→3→4→5→6→7→8→9→10→11→12→13→14→15→16→17→18→19→20→21→22→23→24→25→26→27→28→29→30→31→32→33→34→35→36→37→38→39→40→41→42→
But you’re allowed to be more succinct:
julia> for k=1:42 print("$k→") end #Output below 1→2→3→4→5→6→7→8→9→10→11→12→13→14→15→16→17→18→19→20→21→22→23→24→25→26→27→28→29→30→31→32→33→34→35→36→37→38→39→40→41→42→
Moreover, you can do more with the ‘standard library’, like iterating through cartesian products (without having to use additional libraries like
julia> for m=1:2, k=1:3, l=1:4 # The following line has a conditional if (k==1)&(l==1) println("outermost loop: $m ") end # Don't worry if you don't understand it, # we'll be discussing them at length soon. print(" innermost loop number $l ⟹ " ) print("k=$k\\n") end #Output below outermost loop: 1 innermost loop number 1 ⟹ k=1 innermost loop number 2 ⟹ k=1 innermost loop number 3 ⟹ k=1 innermost loop number 4 ⟹ k=1 innermost loop number 1 ⟹ k=2 innermost loop number 2 ⟹ k=2 innermost loop number 3 ⟹ k=2 innermost loop number 4 ⟹ k=2 innermost loop number 1 ⟹ k=3 innermost loop number 2 ⟹ k=3 innermost loop number 3 ⟹ k=3 innermost loop number 4 ⟹ k=3 outermost loop: 2 innermost loop number 1 ⟹ k=1 innermost loop number 2 ⟹ k=1 innermost loop number 3 ⟹ k=1 innermost loop number 4 ⟹ k=1 innermost loop number 1 ⟹ k=2 innermost loop number 2 ⟹ k=2 innermost loop number 3 ⟹ k=2 innermost loop number 4 ⟹ k=2 innermost loop number 1 ⟹ k=3 innermost loop number 2 ⟹ k=3 innermost loop number 3 ⟹ k=3 innermost loop number 4 ⟹ k=3
It’s bonus tip time! When testing out loops, it’s quite easy to get your console all cluttered up, so use
Ctrl+l to clear the screen (P.S. It actually doesn’t delete the history, but just scrolls a blank line to the top of the terminal).
Finally, one feature that’s easy to overlook but really quite handy is the expressive notation:
julia> for (emoji,word) ∈ Dict("❤️ "=>"Latex","😍"=>"Julia","💯"=>"Machine Learning Geek") println("$word is $emoji.") end #Output below Latex is ❤️ . Machine Learning Geek is 💯. Julia is 😍.
in can be interchanged with $
\\in$. Also, note the order that the sentences are printed in. (Also, in case the first line of the program above seems obscure, it’s simply defining a dictionary, which, along with sets we’ll be discussing soon). We now also have a simple, expressive way of iterating through the characters of a Unicode string:
julia> ASCII="qwrqwr" "qwrqwr" julia> for i=1:6 print(ASCII[i]) end # Our basic approach works due to ASCII chars qwrqwr julia> Unicode="Multi-byte:\\u0915 \\u0916" "Multi-byte:क ख" julia> for i=1:13 print(Unicode[i]) end #This naive approach won't work Multi-byte:कERROR: StringIndexError("Multi-byte:क ख", 13) Stacktrace:  string_index_err(::String, ::Int64) at ./strings/string.jl:12  getindex_continued(::String, ::Int64, ::UInt32) at ./strings/string.jl:220  getindex(::String, ::Int64) at ./strings/string.jl:213  top-level scope at ./REPL:1 julia> for c∈Unicode print(c) end Multi-byte:क ख