1.9 Records
Consider this one-sentence paragraph with some text formatted in bold and italics:
Some words are bold, some are italic, and some are both.
How could you represent this as data in a word processor, spreadsheet, or presentation application?
Let’s begin with the text itself for the paragraph. Maybe we just use a string.
"Some words are bold, some are italic, and some are both."
The words are there, but we lost the formatting. Let’s break the sentence
into a list of the formatted and unformatted parts. I use square brackets “[ ]
” around the list and commas to separate the parts.
[ "Some words are ",
"bold",
",some are ",
"italic",
", and some are ",
"both",
"." ]
Now we can focus on how to embellish each part with formatting. There are four options:
- the text has no formatting,
- the text is only bold,
- the text is only italic, and
- the text is both bold and italic.
Each part needs three pieces of information: the string holding the text, a Boolean indicating whether it is bold, and another Boolean indicating whether it is italic.
[ {text: "Some words are ", bold: false, italic: false},
{text: "bold", bold: true, italic: false},
{text: ",some are ", bold: false, italic: false},
{text: "italic", bold: false, italic: true},
{text: ", and some are ", bold: false, italic: false},
{text: "both", bold: true, italic: true},
{text: ".", bold: false, italic: false} ]
The object that I’ve shown inside braces “{
}
” is a record. It has named members that I can access independently.
Languages often use a period “.” to access the value for a member. If I assign the first
record in the list to the variable “part_1,” you might see something like
part_1.text
or part_1.italic
in the code. The values are “Some words
are ” and false.
Exercise 1.10
Word processors allow much more formatting than shown here. How would you extend the example to include fonts? Make sure you take into account font names, sizes, and colors.
In C, a record is called a struct, and most languages have some way of representing records. The syntax I used in the example is not Python.
While records allow us to create objects with constituent parts, they are not much better than lists that contain items of different types, such as integers and strings. We need to raise the level of abstraction and make new kinds of objects that have functions that work just on them. We also want to hide the representation and workings of these new compound objects. That way, we can alter and improve them without breaking dependent code and applications.