# What's your favorite syntactical sugar in Julia

**URL:** <https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781>\
**Category:** Teaching & Outreach\
**Tags:** question\
**Created:** [November 8, 2020, 10:33am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781 "2020-11-08T10:33:13Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![Albert\_Zevelev](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/albert_zevelev/32/11844_2.png) [@Albert\_Zevelev](https://discourse.julialang.org/u/Albert_Zevelev)\
**Post date:** [November 9, 2020, 5:32am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/21 "2020-11-09T05:32:30Z")

</div>

Some code I [wrote in May](https://github.com/alan-turing-institute/MLJBase.jl/issues/95#issuecomment-626411420) for MLJ.jl:

```julia
function err(ŷ, y)
    return ŷ - y
end

function perr(ŷ, y; tol = eps())
    e = err(ŷ, y)
    p = 100 * e[y .!= 0] ./ y[y .!= 0]
    return p
end

using Statistics
mse(ŷ, y) = err(ŷ, y) |> (x)->x.^2 |> mean
rmse(ŷ, y) = err(ŷ, y) |> x -> x.^2 |> mean |> sqrt
mae(ŷ, y) = err(ŷ, y) |> x -> abs.(x) |> mean
mdae(ŷ, y) = err(ŷ, y) |> x -> abs.(x) |> median
rmdse(ŷ, y) = err(ŷ, y) |> x -> x.^2 |> median |> sqrt
maxae(ŷ, y) = err(ŷ, y) |> x -> abs.(x) |> maximum

# tutorial Root mean square error
rmse2(ŷ, y) = (sqrt ∘ mean ∘ (x->x.^2) ∘ err)(ŷ, y)
# tutorial mean absolute error
mae2(ŷ, y) = (mean ∘ (x->abs.(x)) ∘ err)(ŷ, y)

rmsl(ŷ, y) = err(log.(ŷ), log.(y)) |> x->x.^2 |> mean |> sqrt
rmslp1(ŷ, y) = err(log.(ŷ.+1), log.(y.+1)) |> x->x.^2 |> mean |> sqrt

rss(ŷ, y) = err(ŷ, y) |> (x)->x.^2 |> sum # AKA SSE
tss(ŷ, y) = err(zero(y) .+ mean(y), y) |> (x)->x.^2 |> sum 
ess(ŷ, y) = err(ŷ, zero(y) .+ mean(y)) |> (x)->x.^2 |> sum 

tss2(ŷ, y) = mean(y) .- y |> (x)->x.^2 |> sum 
ess2(ŷ, y) = mean(y) .- ŷ |> (x)->x.^2 |> sum 
rss2(ŷ, y) = y .- ŷ |> (x)->x.^2 |> sum 
rsq2(ŷ, y) = ess2(ŷ, y) / tss2(ŷ, y)

# linear model verify 

# Mean Percentage Error (MPE) is a measure of bias
mpe(ŷ, y) = perr(ŷ, y) |> mean

mape(ŷ, y) = perr(ŷ, y) |> x -> abs.(x) |> mean
mdape(ŷ, y) = perr(ŷ, y) |> x -> abs.(x) |> median
rmspe(ŷ, y) = perr(ŷ, y) |> x -> x.^2 |> mean |> sqrt
rmdspe(ŷ, y) = perr(ŷ, y) |> x -> x.^2 |> median |> sqrt

```

---

<div class="post-metadata">

**Author:** ![Vasily\_Pisarev](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vasily_pisarev/32/7929_2.png) [@Vasily\_Pisarev](https://discourse.julialang.org/u/Vasily_Pisarev)\
**Post date:** [November 9, 2020, 11:02am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/22 "2020-11-09T11:02:05Z")

</div>

1. Customization of `for` loops through `iterate`
2. `.` for broadcast
3. `do`
4. Tuple unpacking, e.g.

```julia
a, = (1, 2) # set a to 1
foo(x, (y, z)) = x + 2y + 3z

foo((_, x)) = x # returns second element of any iterable, wow

```

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [November 9, 2020, 12:38pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/23 "2020-11-09T12:38:41Z")

</div>

Swapping two variables: ` x, y = y, x`

---

<div class="post-metadata">

**Author:** ![JeffreySarnoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeffreysarnoff/32/1980_2.png) [@JeffreySarnoff](https://discourse.julialang.org/u/JeffreySarnoff)\
**Post date:** [November 9, 2020, 1:02pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/24 "2020-11-09T13:02:14Z")

</div>

> [@Vasily\_Pisarev](#):
>
> `foo((_, x)) = x # returns second element of any iterable, wow`

Can we encode `second_to_last`, `third_to_last` … as nicely, without using reverse?

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [November 9, 2020, 4:20pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/25 "2020-11-09T16:20:01Z")

</div>

```julia
"julia"^3 > "julia" ? println("That's true!") : println("That's false.")
That's true!

```

---

<div class="post-metadata">

**Author:** ![simeonschaub](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simeonschaub/32/216566_2.png) [@simeonschaub](https://discourse.julialang.org/u/simeonschaub)\
**Post date:** [November 9, 2020, 7:52pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/26 "2020-11-09T19:52:41Z")

</div>

Yes, we can in the upcoming 1.6. You can just write `foo((_, x...)) = x`. Consuming the rest starting from the third item works similarly.

---

<div class="post-metadata">

**Author:** ![tobydriscoll](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tobydriscoll/32/1843_2.png) [@tobydriscoll](https://discourse.julialang.org/u/tobydriscoll)\
**Post date:** [November 9, 2020, 8:08pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/27 "2020-11-09T20:08:39Z")

</div>

I had my share of anguish about local scoping in loops, but this sort of thing is compensation:

```julia
x = LinRange(-1,1,60)
y = copy(x)
U = [sin(3x+2y) for x in x, y in y]

```

Perhaps like the example by @josePereiro, we will someday just do

```julia
U = [sin(3x+2y) for x,y]

```

---

<div class="post-metadata">

**Author:** ![Impressium](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/impressium/32/19575_2.png) [@Impressium](https://discourse.julialang.org/u/Impressium)\
**Post date:** [December 16, 2020, 1:18pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/28 "2020-12-16T13:18:29Z")

</div>

First one is recorded. I hope you enjoy it and maybe learn one new thing 🙂

[![](https://global.discourse-cdn.com/julialang/original/3X/d/d/ddbad2c3b9e972106e4fb3215e001aaee030411e.jpeg "Syntactic Sugar in Julia Programming Language | Variables") ](https://www.youtube.com/watch?v=QkyyGFJSpqM)

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [December 17, 2020, 9:33am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/29 "2020-12-17T09:33:40Z")

</div>

Is it possible to put the repl side by side with the code?

---

<div class="post-metadata">

**Author:** ![pfitzseb](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pfitzseb/32/45566_2.png) [@pfitzseb](https://discourse.julialang.org/u/pfitzseb)\
**Post date:** [December 17, 2020, 9:38am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/30 "2020-12-17T09:38:37Z")

</div>

Yes, you can just drag’n’drop the terminal to the sidebar.

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [December 17, 2020, 11:35am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/31 "2020-12-17T11:35:33Z")

</div>

Nice. I leave it as a suggestion for further videos, since the fonts need to be large and the ammount of output in the repl becomes very limited.

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [December 17, 2020, 4:59pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/32 "2020-12-17T16:59:13Z")

</div>

Agreed. I wonder why vertical stacking of panes always seems to be the default in editors, when there is so _much_ horizontal space, and so _little_ vertical space.

---

<div class="post-metadata">

**Author:** ![haberdashPI](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/haberdashpi/32/26337_2.png) [@haberdashPI](https://discourse.julialang.org/u/haberdashPI)\
**Post date:** [December 17, 2020, 7:34pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/33 "2020-12-17T19:34:19Z")

</div>

Though I get the argument you’re making, personally, I like the default, because I prefer to have multiple coding columns side by side with a repl below these.

---

<div class="post-metadata">

**Author:** ![Albert\_Zevelev](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/albert_zevelev/32/11844_2.png) [@Albert\_Zevelev](https://discourse.julialang.org/u/Albert_Zevelev)\
**Post date:** [February 25, 2021, 4:55am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/34 "2021-02-25T04:55:15Z")

</div>

Based on: [https://twitter.com/fermatslibrary/status/1364580859202965512?s=20](https://twitter.com/fermatslibrary/status/1364580859202965512?s=20)

```julia
julia> using Primes
julia> isprime(82818079787776757473727170696867666564636261605958575655545352515049484746454443424140393837363534333231302928272625242322212019181716151413121110987654321)
true

```

or

```julia
julia> ss=""
""
julia> for x = 82:-1:1; ss = ss * string(x); end
julia> ii = parse(BigInt, ss)
82818079787776757473727170696867666564636261605958575655545352515049484746454443424140393837363534333231302928272625242322212019181716151413121110987654321
julia> isprime(ii)
true

```

---

<div class="post-metadata">

**Author:** ![gustaphe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gustaphe/32/18174_2.png) [@gustaphe](https://discourse.julialang.org/u/gustaphe)\
**Post date:** [February 25, 2021, 6:37am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/35 "2021-02-25T06:37:14Z")

</div>

Not my _favourite_ favourite, but nobody has mentioned

```julia
open("filename.ext", "w") do f
    println(f,"no need to worry about closing file")
end

```

---

<div class="post-metadata">

**Author:** ![xiaodai](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xiaodai/32/15937_2.png) [@xiaodai](https://discourse.julialang.org/u/xiaodai)\
**Post date:** [February 25, 2021, 11:44am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/36 "2021-02-25T11:44:41Z")

</div>

> [@gustaphe](#):
>
> ```julia
> open("filename.ext", "w") do f
> println(f,"no need to worry about closing file")
> end
> 
> ```

that’s from python and ruby? right?

---

<div class="post-metadata">

**Author:** ![gustaphe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gustaphe/32/18174_2.png) [@gustaphe](https://discourse.julialang.org/u/gustaphe)\
**Post date:** [February 25, 2021, 3:31pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/37 "2021-02-25T15:31:33Z")

</div>

I don’t know where it’s from, but it’s nice.

---

<div class="post-metadata">

**Author:** ![Shuhua](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/shuhua/32/27618_2.png) [@Shuhua](https://discourse.julialang.org/u/Shuhua)\
**Post date:** [February 25, 2021, 4:20pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/38 "2021-02-25T16:20:24Z")

</div>

> [@xiaodai](#):
>
> that’s from python and ruby? right?

Ruby has it, but Python does not, if I am not wrong.

---

<div class="post-metadata">

**Author:** ![mihalybaci](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mihalybaci/32/13528_2.png) [@mihalybaci](https://discourse.julialang.org/u/mihalybaci)\
**Post date:** [February 25, 2021, 4:22pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/39 "2021-02-25T16:22:32Z")

</div>

Python has something similar:

```julia
with open('file.txt', 'a') as f:
    f.write("hello there!\n")

```

---

<div class="post-metadata">

**Author:** ![Mason](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mason/32/2423_2.png) [@Mason](https://discourse.julialang.org/u/Mason)\
**Post date:** [February 25, 2021, 6:29pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/40 "2021-02-25T18:29:58Z")

</div>

This feature is much less general / useful and much more complicated than julia’s `do` blocks. On the surface, they appear to do similar things, but they’re actually quite different.

Julia’s `do` blocks are **just** syntax sugar for working with higher order functions. This makes them useful in almost any context, unlike python’s `with` blocks.

[Previous page](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781.md?page=1)

[Next page](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781.md?page=3)
