Julio Biason
5 years ago
4 changed files with 62 additions and 3 deletions
@ -0,0 +1,58 @@
|
||||
+++ |
||||
title = "Things I Learnt The Hard Way - If Your Data Has a Schema, Use a Structure" |
||||
date = 2019-06-25 |
||||
|
||||
[taxonomies] |
||||
tags = ["en-au", "books", "things i learnt", "data classes", "structs"] |
||||
+++ |
||||
|
||||
You may be tempted to use a list (or tuple, if your language allows) to keep |
||||
your data if it's simple -- like, say, only 2 fields. Don't. |
||||
|
||||
<!-- more --> |
||||
|
||||
Some languages allow unstructured data to be kept in the format of tuples: |
||||
They act like lists, but you can use to store heterogeneous data (which is a |
||||
cute way of "it stores fields of different types"). |
||||
|
||||
This languages also allow you to "destructurize" them, so you can extract |
||||
elements from them without directly accessing them by index. |
||||
|
||||
For example, in Python, you can have a tuple with: |
||||
|
||||
```python |
||||
a_tuple = ('A String', 1, 7.5) |
||||
``` |
||||
|
||||
And you can destructure it with |
||||
|
||||
```python |
||||
some_string, an_integer, a_float = a_tuple |
||||
``` |
||||
|
||||
See? It's simple! You don't need to create a whole structure if you're just |
||||
passing a string, an integer and a float around. |
||||
|
||||
Except, you do. |
||||
|
||||
Tuples and destructuring should be used only when you need to pass data from |
||||
one function to another -- and barely that. When you have this tuple being |
||||
passed around, being destructured and created again -- say, you are adding one |
||||
value of the tuple to another value and producing a new tuple in the same |
||||
format -- then you have a structured data. |
||||
|
||||
And when you have a structured data, you must use a data class or a struct (or |
||||
even |
||||
[NamedTuples](https://docs.python.org/3/library/collections.html?highlight=namedtuple#collections.namedtuple), |
||||
if you're using Python). |
||||
|
||||
Although it may look way more simpler to keep destructuring and building the |
||||
tuple over and over, in the long run you'll end up with a mess 'cause a simple |
||||
change -- like adding a new field -- will require checking every destructuring |
||||
and every creation of the tuple to make sure if will stay in the same shape |
||||
every time. |
||||
|
||||
So: You data has a schema? Use a Data Class or Class or Struct. Only if it is |
||||
schemaless, then you can use a tuple. |
||||
|
||||
{{ chapters(prev_chapter_link="/books/things-i-learnt/data-types", prev_chapter_title="Types Say What Your Data Is", next_chapter_link="/books/things-i-learnt/languages-are-more", next_chapter_title="A Language Is Much More Than A Language") }} |
Loading…
Reference in new issue