# Amazing! You can define a function using "do" and "end"

**URL:** <https://discourse.julialang.org/t/amazing-you-can-define-a-function-using-do-and-end/21384>\
**Category:** New to Julia\
**Created:** [March 2, 2019, 8:39am UTC](https://discourse.julialang.org/t/amazing-you-can-define-a-function-using-do-and-end/21384 "2019-03-02T08:39:24Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![StevenSiew](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevensiew/32/218393_2.png) [@StevenSiew](https://discourse.julialang.org/u/StevenSiew)\
**Post date:** [March 2, 2019, 8:39am UTC](https://discourse.julialang.org/t/amazing-you-can-define-a-function-using-do-and-end/21384/1 "2019-03-02T08:39:24Z")

</div>

I did not know that you can define a function “func” using just “do” and “end”. This is amazing!!!

```julia
    @inline function PDFP_setDefaultPrecision(prec::Int)
        global DEFAULT_PRECISION[] = prec < 0 ? 0 : prec
    end

    function PDFP_temporarily_setDefaultPrecision(func::Function,prec::Int)
        olddefaultprec = PDFP_getDefaultPrecision()
        PDFP_setDefaultPrecision( prec )
        func()
        PDFP_setDefaultPrecision( olddefaultprec )
    end

```

And using it like this

```julia
julia> println("Default Precision is ",PDFP_getDefaultPrecision() )
Default Precision is 16

julia> PDFP_temporarily_setDefaultPrecision(4) do
           global result = inv([PDFP(1) PDFP(2); PDFP(3) PDFP(4)])   
       end;

julia> result
2×2 Array{PDFP,2}:
 PDFP(1, 0, [2, 0, 0, 0]) PDFP(0, 0, [1, 0, 0, 0])
 PDFP(0, 0, [1, 5, 0, 0]) PDFP(1, -1, [5, 0, 0, 0])

```

---

<div class="post-metadata">

**Author:** ![bennedich](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bennedich/32/4894_2.png) [@bennedich](https://discourse.julialang.org/u/bennedich)\
**Post date:** [March 2, 2019, 9:07am UTC](https://discourse.julialang.org/t/amazing-you-can-define-a-function-using-do-and-end/21384/2 "2019-03-02T09:07:37Z")

</div>

👍

It’s explained in a bit [more detail in the manual](https://docs.julialang.org/en/latest/manual/functions/#Do-Block-Syntax-for-Function-Arguments-1) (perhaps that’s where you found it).

This is indeed quite useful to create more readable code. And this is the reason you’ll usually see function arguments first in the argument list (this trick only works with the first argument), and it’s a good practice to follow for code you write.
