DEV Community

Manav
Manav

Posted on

Learning Nim: var vs let vs const

I've been exploring Nim-lang these days. Its one of the new languages in town and if you're hearing about it the first time then you should definitely checkout this FAQ.

var, let and const all of them are used to hold value in Nim, but there are slight differences that beginners need to be aware of.

var

var can be used in 3 different forms to define a variable.


# 1. Declare first and assign later.
var <variable-name>: <variable-type>
<variable-name> = <value> 

# 2. Declare and assign at the same time.
var <variable-name>: <variable-type> = <value>

# 3. Directly assign the variable, Nim compiler is smart
#    enough to guess the type of the value
var <variable-name> = <value>

# Following any case, the variable can be reassigned a value
<variable-name> = <value>

Can we change the type of the variable while reassigning?

# No
var x = 9
x = "string" #throws type mismatch error

let

let also works like var, except let requires initialization and once the value is assigned, it cannot be changed.

let <variable-name>: <type> = <value> #works
let <variable-name> = <value> #works

let <variable-name>: <type> #ERROR
<variable-name> = <value> #ERROR

How about the following case?

let x = 9
let x = 10 #throws ERROR. It will be considered as redefinition of x.

const

const keyword is used if we want to assign a constant value to a variable and the value is known while writing the code. Once a value is assigned to it, it cannot be reassigned.

const <variable-name>: <type> = <value> #works
const <variable-name> = <value>

const <vaiable-name>: <type> #ERROR
<variable-name> = <value> #ERROR

But then what's the difference between const and let?

const and let are almost the same except that const expressions are evaluated at compile time and let expressions are evaluated at run time. For example:

var x = 9
let y = x+2 #works
const z = x+2 #throws ERROR

The compiler needs an absolute value for a constant expression that can be bound to the variable at compile time.

If you learnt something, hit ❤️ and share. Others deserve learning too 🙂

Discussion (3)

Collapse
ankitdobhal profile image
Ankit Dobhal

Superb blog welcome to dev community

Collapse
adityapadwal profile image
Aditya Padwal

Nice Manav, would be great to have you in below group.

linkedin.com/groups/10546099

Collapse
sigmapie8 profile image
Manav Author

Thanks for the suggestion, I have requested to join... Why don't you make it a free for all group w/o a request wall?