O'Reilly logo

Études for Elixir by J. David Eisenberg

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Chapter 5. Strings

Étude 5-1: Validating Input

The Elixir philosophy is “let it crash”; this makes a great deal of sense for a telecommunications system (which is what Elixir was first designed for). Hardware is going to fail. When it does, you just replace it or restart it. The person using the phone system is unaware of this; her phone just continues to work.

This philosophy, however, is not the one you want to employ when you have (atypical for Elixir) programs that ask for user input. You want to those to crash infrequently and catch as many input errors as possible.

In this étude, you will write a module named ask_area, which prompts you for a shape and its dimensions, and then returns the area by calling Geom.area/3, which you wrote in Étude 4-1.

Your module will ask for the first letter of the shape (in either upper or lower case), then the appropriate dimensions. It should catch invalid letters, non-numeric input, and negative numbers as input. Here is some sample output.

iex(1)> c("ask_area.ex") [AskArea] iex(2)> c("geom.ex") [Geom] iex(3)> AskArea.area() R)ectangle, T)riangle, or E)llipse: r Enter width > 4 Enter height > 3 12 iex(4)> AskArea.area() R)ectangle, T)riangle, or E)llipse: T Enter base > 3 Enter height > 7 10.5 iex(5)> AskArea.area() R)ectangle, T)riangle, or E)llipse: w Unknown shape w :ok iex(6)> AskArea.area() R)ectangle, T)riangle, or E)llipse: r Enter width > -3 Enter height > 4 Both numbers must be greater than or equal to zero. :ok iex(7)> AskArea.area() ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required