Book Image

Crystal Programming

By : George Dietrich, Guilherme Bernal
Book Image

Crystal Programming

By: George Dietrich, Guilherme Bernal

Overview of this book

Crystal is a programming language with a concise and user-friendly syntax, along with a seamless system and a performant core, reaching C-like speed. This book will help you gain a deep understanding of the fundamental concepts of Crystal and show you how to apply them to create various types of applications. This book comes packed with step-by-step explanations of essential concepts and practical examples. You'll learn how to use Crystal’s features to create complex and organized projects relying on OOP and its most common design patterns. As you progress, you'll gain a solid understanding of both the basic and advanced features of Crystal. This will enable you to build any application, including command-line interface (CLI) programs and web applications using IOs, concurrency and C bindings, HTTP servers, and the JSON API. By the end of this programming book, you’ll be equipped with the skills you need to use Crystal programming for building and understanding any application you come across.
Table of Contents (26 chapters)
1
Part 1: Getting Started
5
Part 2: Learning by Doing – CLI
10
Part 3: Learn by Doing – Web Application
13
Part 4: Metaprogramming
18
Part 5: Supporting Tools

Creating custom compile-time errors

Compile-time errors are one of the benefits of a compiled language. You are made aware of problems immediately versus needing to wait until that code is executed to find out there was a bug. However, because Crystal does not know the context around a specific error, it will always output the same error message for the same type of error. The last feature we are going to discuss in this chapter resolves around emitting your own custom compile-time errors.

Custom compile-time errors can be a great way to add additional information to the error message that makes the end user's life much easier by making it clearer what needs to be done to fix the problem. Going back to the example at the end of the last section, let's update our .exclude_type macro to provide a better error message if an unexpected type is passed.

In the past few chapters, we have made use of various top-level macro methods, such as #env, #flag, and #debug. Another...