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

Exploring the type system

Crystal is a statically typed language; the compiler knows the types of every variable and expression before execution. This enables several correctness checks on your code, such as validating that the invoked methods exist and that the passed arguments match the signature, or ensuring that you are not trying to access nil properties.

A single type isn't enough in every situation: a single variable can be reassigned to values of different types, and thus the type of the variable can be any of the types of each value. This can be expressed with a union type, a type made from joining all the possible types. With it, the compiler knows that the variable can hold a value from any of those types at runtime.

You can use the typeof(x) operator to discover the type of any expression or variable as seen by the compiler. It might be a union of multiple types. You can also use x.class to discover the runtime type of a value; it will never be a union. Finally...