
Nim: Data Structures
More complex data structures can be defined via a type
statement:
type
State = enum
Victoria, NewSouthWales, Queensland, Tasmania, SouthAustralia, NorthernTerritory, WesternAustralia, ACT
var home = Victoria
echo home
# Victoria
echo typeof home
# State
Arrays in Nim are of fixed length with their size specificed at compile time. Sequences are like arrays, but have a dynamic length. They can be constructed by the array constructor []
in conjunction with the array to sequence operator @
.
var
x: seq[int] # a reference to a sequence of integers
x = @[1, 2, 3, 4, 5, 6]
There’s also openarrays, though they can only be used as parameters:
proc openArraySize(oa: openArray[string]): int =
oa.len
Creating a custom object is done by defining a new type, with a type of object
:
type
Person = object
name: string
age: int
var person1 = Person(name: "Peter", age: 30)
echo person1.name # "Peter"
echo person1.age # 30
Mark fields that should be visible from outside the defining module with *
.
type
Person* = object # the type is visible from other modules
name*: string # the field of this type is visible from other modules
age*: int
A similar but alternate approach for object-like behaviour is to use tuples:
type
Person = tuple[name: string, age: int]
var
person: Person
person = (name: "Peter", age: 30)
Published: 21/03/2022
Hi, I'm Glenn! 👋
I've spent most of my career working with or at startups. I'm currently the VP of Product / GTM @ Ockam where I'm helping developers build applications and systems that are secure-by-design. It's time we started securely connecting apps, not networks.
Previously I led the Terraform product team @ HashiCorp, where we launched Terraform 1.0, Terraform Cloud, and a whole host of amazing capabilities that set the stage for a successful IPO. Prior to that I was part of the Startup Team @ AWS, and earlier still an early employee @ Heroku. I've also invested in a couple of dozen early stage startups.
I've spent most of my career working with or at startups. I'm currently the VP of Product / GTM @ Ockam where I'm helping developers build applications and systems that are secure-by-design. It's time we started securely connecting apps, not networks.
Previously I led the Terraform product team @ HashiCorp, where we launched Terraform 1.0, Terraform Cloud, and a whole host of amazing capabilities that set the stage for a successful IPO. Prior to that I was part of the Startup Team @ AWS, and earlier still an early employee @ Heroku. I've also invested in a couple of dozen early stage startups.