--- marp: true paginate: true math: mathjax theme: buutti title: 2. Variables and Types --- # Variables and Types ## Overview * Variables * Comments * Data Types * Arithmetic Operators * Increment & Decrement * Assignment Operators * Strings * Character Constants * String Interpolation ## Variables * A variable can be thought of as a name for a certain address in computer's memory * Using this name we can access the value on the computer's memory * The value can be read or written * On more practical terms: We can assign values to named variables. ### Declaring variables * Every variable declaration in C# requires the ***type*** and the ***name*** of the variable, for example: ```csharp int x; ``` * After declaration, you can assign a ***value*** for declared variables: ```csharp x = 25; ``` * Variable declaration with value assignment can be done in one line: ```csharp int x = 25; ``` ### Printing to console with `Console.WriteLine`
* We can use the method `Console.WriteLine` to write, a.k.a. ***print*** to the C# console ```csharp Console.WriteLine("Hello World!") ``` * We can also declare variables and print their values like this: ```csharp int example = 123; Console.WriteLine(example); // prints 123 ```
This program prints the value `15`: ```csharp using System; namespace MyAwesomeProgram { class Program { static void Main(string[] args) { int a = 25; int b = 10; Console.WriteLine(a - b); } } } ```
### Extra: Modifiers * A common modifier to add in front of a variable is `const`, short for ***constant*** * If we know that a value of a variable is never going to change during the execution of the script, we can set it to `const`: ```c# const int one = 1; one = 2; // raises an error ``` * Some programmers prefer using `const` by default. * Other modifiers include ***access modifiers*** introduced in [Lecture 7](7-classes-and-objects#access-modifiers). ## Comments * There are two basic ways to comment in C#: ```csharp // This is a comment /* This is a multi line comment */ ``` * Any text inside a comment will not be executed * Use comments to a) explain your code b) comment out actual code for testing and debugging ## Data types ### What is a data type? * Data type tells to a computer what type of data is stored in a variable. * Data types are commonly divided into two categories: * Primitive data types * Reference data types * Here we go through the primitive data types * We dig deeper on the differences of these data types later in [Lecture 7](7-classes-and-objects#value-and-reference-types) ## Primitive data types | Type | Represents | Range | Default | |:----------|:-------------------------------|:-------------------------------------------------|:--------| | `bool` | Boolean value | `true` or `false` | `false` | | `int` | 32-bit signed integer | $-2147483648$ to $2147483647$ | `0` | | `float` | 32-bit single-precision float | $±1.5 \cdot 10^{-45}$ to $±3.4 \cdot 10^{38}$ | `0.0F` | | `double` | 64-bit double-precision float | $±5.0 \cdot 10^{-324}$ to $±1.7 \cdot 10^{308}$ | `0.0D` | | `decimal` | 128-bit precise decimal values | $±1.0 \cdot 10^{-28}$ to $±7.9228 \cdot 10^{28}$ | `0.0M` | | `char` | 16-bit Unicode character | `U+0000` to `U+ffff` | `\0` | | `byte` | 8-bit unsigned integer | $0$ to $255$ | `0` | More types listed in the [C# reference](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/built-in-types)! ### Data type examples ```csharp double airPressure = 1.2; // Use for most decimal numbers decimal accountBalance = 1.2m; // Use for accuracy (e.g. financial applications) float bulletSpeed = 1.2f; // Use only when you know its precision will be enough bool loggedIn = false; char previousInput = 'b'; ``` * `char` is only used for single characters, multi-character ***strings*** will be introduced in a bit. ## Extra: Casting data types Data types can be ***cast*** to another either...
...implicitly: ```csharp double valueAddedTax = 25.5; decimal valueAddedTaxDecimal = valueAddedTax; ```
...explicitly: ```csharp double valueAddedTax = 25.5; decimal valueAddedTaxDecimal = (decimal)valueAddedTax; ```
* Casting is useful when, for example, when we want to sum a `double` and a `decimal` together: ```csharp double a = 1.0; decimal b = 2.1m; Console.WriteLine(a + (double)b); Console.WriteLine((decimal)a + b); ``` * [C# Guide: Casting and type conversions](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/types/casting-and-type-conversions) ## Assignments (variables) [Assignments about this topic can be found here](https://gitea.buutti.com/education/academy-assignments/src/branch/master/C%23%20Basics/2.1.%20Variables%20&%20Types) ## Assignments (data types) [Assignments about this topic can be found here](https://gitea.buutti.com/education/academy-assignments/src/branch/master/C%23%20Basics/2.2.%20Data%20Types) ## Arithmetic operations? * ***Arithmetic operations*** are common mathematical operations: * Addition * Subtraction * Multiplication * Division * Modulus (remainder, in Finnish *jakojäännös*) * The operations are represented by **_arithmetic operators_** ## Arithmetic Operators | Operator | Name | Example | Description | |:---------|:---------------|:--------|:---------------------------------------| | `+` | Addition | `a + b` | Adds together two values | | `-` | Subtraction | `a - b` | Subtracts one value from another | | `*` | Multiplication | `a * b` | Multiplies two values | | `/` | Division | `a / b` | Divides one value by another | | `%` | Modulus | `a % b` | Returns the division remainder | | `++` | Increment | `a++` | Increases the value by 1 | | `--` | Decrement | `a–-` | Decreases the value by 1 | ## Exercise 1: Trying Out Variables 1) Create a new console application and declare two variables of type `double`. 2) Assign different values for those variables. 3) Print the sum, difference, fraction and product of those values to the console. ## The assignment operator We have used the assignment operator `=` for assigning values for variables: ```csharp int x; x = 25; ``` * ***Note*** the difference between `=` and `==` introduced in [Lecture 3](3-conditionals#comparison-operators)! * `=` is used for assigning values for variables, `==` is used for ***comparing*** values ### Assignment operators
| Operator | Example | Same As | |:---------|:---------|:------------| | `=` | `x = 5` | `x = 5` | | `+=` | `x += 5` | `x = x + 5` | | `-=` | `x -= 5` | `x = x - 5` | | `*=` | `x *= 5` | `x = x * 5` | | `/=` | `x /= 5` | `x = x / 5` | | `%=` | `x %= 5` | `x = x % 5` |
* As shown here, there are some assignment operators that work as ***shorthands*** for longer assignments * Particularly useful when the variable name is longer, so you don't have to write it twice when its value is changed
### Assignment operators: An example ```csharp int uppercaseLetters = 2; uppercaseLetters += 4; // is now 6 int specialCharacters = 2; specialCharacters *= 2; // is now 4 Console.WriteLine(uppercaseLetters); Console.WriteLine(specialCharacters); ``` ### Increment and decrement operations * You can increment or decrement a variable value by 1 with dedicated short-hands * Most programming languages implement these!
* Addition example: ```csharp int a = 3; a = a + 1; // a is now 4 a += 1; // a is now 5 a++; // a is now 6 ```
* Subtraction example: ```csharp int a = 3; a = a - 1; // a is now 2 a -= 1; // a is now 1 a--; // a is now 0 ```
* `++` and `--` are called the ***increment and decrement operators*** ### Extra: Increment/decrement operation precedence * Note that incrementing can be written as ***prefix*** (`++i`) or a ***postfix*** (`i++`) * In this example, `a++` and `++a` do exactly the same: ```csharp int a = 3; a++; // a is now 4 ++a; // a is now 5 ``` * Their exact difference is [complicated](https://stackoverflow.com/questions/3346450/what-is-the-difference-between-i-and-i-in-c), and in some cases, using either prefix or postfix form can produce different results:
```csharp int a = 3; int b = ++a; Console.WriteLine(b); // 4 ``` Assignment of `b` happens after `++`, so its value is 4
```csharp int a = 3; int b = a++; Console.WriteLine(b); // 3 ``` Assignment of `b` happens before `++`, so its value is 3
## Strings * `string` is a special type that contains an array of characters. ```csharp string name = "Sini Aalto"; ``` * You can ***concatenate*** (i.e., combine) multiple strings with the `+` operator: ```csharp string firstName = "Sini"; string lastName = "Aalto"; string fullName = firstName + " " + lastName; Console.WriteLine(fullName); // Outputs "Sini Aalto" ``` ### Character Constants * Character constants are preceded by a backslash `\` and can be used for formatting strings * `\n` represents a ***newline*** ```csharp string firstName = "Johannes"; string lastName = "Kantola"; string fullName = firstName + "\n" + lastName; Console.WriteLine(fullName); /* This outputs Johannes Kantola */ ``` * All character constants are listed [here](https://www.tutorialspoint.com/csharp/csharp_constants.htm) ### String Interpolation * Concatenating multiple variables into one string with the `+` operator quickly becomes tedious * It's much easier to use *__string interpolation__* by prefixing your target string with `$` and inserting the variables inside curly brackets `{ }`: ```csharp string animal = "Dog"; string sound = "Woof"; Console.WriteLine($"{animal} says {sound}!"); // Outputs "Dog says Woof!" ``` ### String Formatting * You can add *__format strings__* to change the way variables are interpolated into a string * Add the format string after your variable, separated by a colon (:) * You can find an overview of format strings and a handy list of both standard and custom strings [here](https://learn.microsoft.com/en-us/dotnet/standard/base-types/formatting-types) ```csharp double pi = 3.141592653; Console.WriteLine($"Pi to three digits: {pi:G3}"); // Outputs "Pi to three digits: 3.14" ``` ## User input with `Console.ReadLine()`
* For the next exercise, you'll need the `Console.ReadLine()` method * The method pauses the program, waits for an input stream from the console that pops up, and returns the value of the input: ```csharp string userInput = Console.ReadLine(); Console.WriteLine(userInput); ```
![w:200](imgs/2%20Variables%20and%20Types_1.png)
## Exercise 2: Weekday survey 1) Create a console application that asks the user which weekday it is and assigns the answer to a string variable. 2) Print `Have a nice ` to the console where `` is replaced with the string the user wrote. ## Assignments (arithmetic operations) [Assignments about this topic can be found here](https://gitea.buutti.com/education/academy-assignments/src/branch/master/C%23%20Basics/2.3.%20Arithmetic%20Operations)