Advanced strings in Elixir
| Heredocs | |
| Graphemes vs bytes | |
| Trim and pad | |
| Inspect anything |
Heredocs
Triple quoted heredocs hold multi line text without escape noise. The closing quotes set the indentation baseline, and extra leading spaces on each line fall away.
text = """
line one
line two
"""
The variable text holds both lines joined by a newline, ready for templates and messages. Heredocs shine for embedded queries and sample documents that span several lines.
Graphemes vs bytes
Elixir strings are UTF-8 binaries, so one visible character can occupy several bytes. String.length counts characters you see, while byte_size counts raw storage bytes underneath.
String.length("héllo")
byte_size("héllo")
The accented word measures 5 characters but 6 bytes, because the accented letter needs two bytes. Think in graphemes for display logic and in bytes only for storage math.
Trim and pad
Trim removes surrounding whitespace and pad grows short text to a target width. Together they tidy user input and align columns in plain text reports.
" hi "
|> String.trim()
|> String.pad_leading(6, "0")
Trimming leaves hi, and padding fills the width of 6 with zeros on the left. Sibling functions pad_trailing and trim with custom characters cover the mirrored cases.
Inspect anything
Inspect converts any value into readable text for logs and debugging sessions. IO.inspect prints the value and returns it unchanged, so it slips into pipelines without disturbing them.
IO.inspect([1, 2, 3], label: "nums")
Running the line prints the labelled list and hands the same list back to the caller. Keep inspect calls in study code and swap them for a real logger before shipping.
Next: Sigils
Article author: Arthur Isaev