# 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:** 3

<div class="post-metadata">

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

</div>

Python has it, plus a general facility for writing your own "context manager"s. Common Lisp has had it forever. I would be surprised if there are not several other languages as well. There’s a tendency to attribute innovation to the big player (Not just in software, but engineering in general, and probably wider still) I’m susceptible to this. I kind of vaguely thought Julia got comprehensions from python.

---

<div class="post-metadata">

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

</div>

Using unicode symbols for constants. Instead of calling something like np.pi writing π just feels right.

---

<div class="post-metadata">

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

</div>

I like `end`  
As in `xs[end]` for the last element.  
but end can do lots of other cool things.  
Because it is replaces with `lastindex(xs)` during lowering  
Meaning you can use it just like a number.

Like getting the first 5 elements, or all the elements if there are less than 5:  
`xs[1:min(end, 5)]`

Or or breaking the data into splits:

```julia
train = data[1:9end÷10]
test = data[9end÷10 + 1 : end]

```

---

<div class="post-metadata">

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

</div>

I like @mbauman 's example for constructing from a finite array an array whose elements repeat forever `x[mod1(i, end)]`.

---

<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:** [February 25, 2021, 6:48pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/45 "2021-02-25T18:48:33Z")

</div>

@Albert_Zevelev, Julia’s diabetics abstain, it’s too much sugar.

---

<div class="post-metadata">

**Author:** ![Skoffer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/skoffer/32/378_2.png) [@Skoffer](https://discourse.julialang.org/u/Skoffer)\
**Post date:** [February 25, 2021, 7:29pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/46 "2021-02-25T19:29:15Z")

</div>

As of now my favorite sugar is

```julia
julia> function f()
           (; a = 1, b = 2, c = 3)
       end
f (generic function with 1 method)

julia> (; b, c) = f()
(a = 1, b = 2, c = 3)

julia> b
2

julia> c
3

```

---

<div class="post-metadata">

**Author:** ![nilshg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nilshg/32/2283_2.png) [@nilshg](https://discourse.julialang.org/u/nilshg)\
**Post date:** [February 25, 2021, 7:33pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/47 "2021-02-25T19:33:55Z")

</div>

> [@oxinabox](#):
>
> xs[1:min(end, 5)]

This had never occured to me - really neat!

---

<div class="post-metadata">

**Author:** ![evanfields](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/evanfields/32/1744_2.png) [@evanfields](https://discourse.julialang.org/u/evanfields)\
**Post date:** [February 25, 2021, 8:00pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/48 "2021-02-25T20:00:06Z")

</div>

This is erroring for me in the REPL on 1.6rc1. Any idea why?

```julia
ERROR: syntax: invalid assignment location "; b, c" around REPL[9]:1
Stacktrace:
 [1] top-level scope
   @ REPL[9]:1

```

---

<div class="post-metadata">

**Author:** ![Skoffer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/skoffer/32/378_2.png) [@Skoffer](https://discourse.julialang.org/u/Skoffer)\
**Post date:** [February 25, 2021, 8:00pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/49 "2021-02-25T20:00:56Z")

</div>

It’s 1.7 feature 🙂 For those, who like to live on the edge.

---

<div class="post-metadata">

**Author:** ![evanfields](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/evanfields/32/1744_2.png) [@evanfields](https://discourse.julialang.org/u/evanfields)\
**Post date:** [February 25, 2021, 8:23pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/50 "2021-02-25T20:23:12Z")

</div>

Well past the edge, since 1.6 isn’t out yet 🙂 perhaps we could call it “off the edge of the world and into the starry darkness of `nightly`”

---

<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 26, 2021, 2:51am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/51 "2021-02-26T02:51:47Z")

</div>

> [@evanfields](#):
>
> This is erroring for me in the REPL on 1.6rc1. Any idea why?

Also wrong on 1.5.3. I am wondering what the feature is called and where is the documentation 😁

---

<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 26, 2021, 8:14am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/52 "2021-02-26T08:14:13Z")

</div>

[https://docs.julialang.org/en/v1.7-dev/NEWS/](https://docs.julialang.org/en/v1.7-dev/NEWS/)

---

<div class="post-metadata">

**Author:** ![CameronBieganek](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cameronbieganek/32/6915_2.png) [@CameronBieganek](https://discourse.julialang.org/u/CameronBieganek)\
**Post date:** [February 26, 2021, 4:06pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/53 "2021-02-26T16:06:04Z")

</div>

> [@Skoffer](#):
>
> `julia> (; b, c) = f()`

It’s worth noting that this new feature also allows you to unpack structs (i.e., pattern matching) in function arguments, like this:

```julia
struct A
    x
    y
end

foo((; x, y)::A) = x + y

```

```julia
julia> foo(A(1, 2))
3

```

---

<div class="post-metadata">

**Author:** ![sijo](https://avatars.discourse-cdn.com/v4/letter/s/da6949/32.png) [@sijo](https://discourse.julialang.org/u/sijo)\
**Post date:** [April 30, 2021, 7:49am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/54 "2021-04-30T07:49:01Z")

</div>

This `(; ...)` named destructuring is awesome for working with data frames:

```julia
julia> using DataFrames

julia> df = DataFrame(rand.([Bool, "abc", Float64, Float64], 5),
                      ["flag", "type", "x", "y"])
5×4 DataFrame
 Row │ flag type x y         
     │ Bool Char Float64 Float64   
─────┼──────────────────────────────────
   1 │ false c 0.757074 0.637436
   2 │ true a 0.12791 0.163183
   3 │ false b 0.452078 0.547038
   4 │ true c 0.187923 0.0529017
   5 │ true b 0.10274 0.242524

julia> for (; x, y) in eachrow(df)
           println("x-y = $(x-y)")
       end

julia> map(eachrow(df)) do (; x, y)
           x-y
       end

julia> (; x, y) = df

```

---

<div class="post-metadata">

**Author:** ![xfcjscn](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xfcjscn/32/19613_2.png) [@xfcjscn](https://discourse.julialang.org/u/xfcjscn)\
**Post date:** [May 14, 2021, 4:51am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/55 "2021-05-14T04:51:40Z")

</div>

No body mention function definition?  
e.g. f(x) = x^2

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [May 14, 2021, 1:23pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/56 "2021-05-14T13:23:04Z")

</div>

I wonder if anyone here realized that refined sugar is poisonous to humans?

---

<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:** [May 14, 2021, 1:31pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/57 "2021-05-14T13:31:00Z")

</div>

Happy Birthday @PetrKryslUCSD!  
Today you can have as much sugar as you want!

---

<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:** [May 14, 2021, 1:33pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/58 "2021-05-14T13:33:59Z")

</div>

Some poison from excess sugar:

```julia
julia> f(x) = f(x)
f (generic function with 1 method)
julia> f(1)
ERROR: StackOverflowError:
Stacktrace:
 [1] f(x::Int64) (repeats 79984 times)

```

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [May 14, 2021, 1:54pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/59 "2021-05-14T13:54:13Z")

</div>

Thank you, I would rather take the other 364 days without sugar. 🙂

---

<div class="post-metadata">

**Author:** ![Wei\_Yang](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/wei_yang/32/23951_2.png) [@Wei\_Yang](https://discourse.julialang.org/u/Wei_Yang)\
**Post date:** [May 15, 2021, 3:34am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/60 "2021-05-15T03:34:01Z")

</div>

Every feature of Julia that I don’t yet know is a potential favorite syntactical sugar.

Just a moments ago, my favorite changed from the `|>` and `.|>` to the `assert` macro

```julia
@assert( σ >=0 , "σ must be non-negative")

```

🤦‍♂️

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

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