diff --git a/.vscode/markdown.code-snippets b/.vscode/markdown.code-snippets index 1d363ac..ea039a6 100644 --- a/.vscode/markdown.code-snippets +++ b/.vscode/markdown.code-snippets @@ -140,6 +140,13 @@ "", ] }, + "em dash" : { + "scope": "markdown", + "prefix": "em", + "body" : [ + "—", + ] + }, "marp footer" : { "scope": "markdown", "prefix": "footer", diff --git a/10-static-members-methods-and-classes-slides.html b/10-static-members-methods-and-classes-slides.html index bc73ff7..03dea6f 100644 --- a/10-static-members-methods-and-classes-slides.html +++ b/10-static-members-methods-and-classes-slides.html @@ -13,13 +13,13 @@ /* buutti.css */ /* @theme buutti */div#\:\$p>svg>foreignObject>section .columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:calc(var(--marpit-root-font-size, 1rem) * 1)}div#\:\$p>svg>foreignObject>section .columns12{display:grid;grid-template-columns:1fr 2fr;gap:calc(var(--marpit-root-font-size, 1rem) * 1)}div#\:\$p>svg>foreignObject>section .columns21{display:grid;grid-template-columns:2fr 1fr;gap:calc(var(--marpit-root-font-size, 1rem) * 1)}div#\:\$p>svg>foreignObject>section .columns32{display:grid;grid-template-columns:3fr 2fr;gap:calc(var(--marpit-root-font-size, 1rem) * 1)}div#\:\$p>svg>foreignObject>section .columns23{display:grid;grid-template-columns:2fr 3fr;gap:calc(var(--marpit-root-font-size, 1rem) * 1)}div#\:\$p>svg>foreignObject>section .columns111{display:grid;grid-template-columns:1fr 1fr 1fr;gap:calc(var(--marpit-root-font-size, 1rem) * 1)}div#\:\$p>svg>foreignObject>section .centered{display:flex;flex-direction:column;justify-content:center;text-align:center}div#\:\$p>svg>foreignObject>section .tableborderless td,div#\:\$p>svg>foreignObject>section th{border:none!important;border-collapse:collapse}div#\:\$p>svg>foreignObject>section.extra{background-color:#5d275d;background-image:linear-gradient(to bottom,#401a40,#1d0c1d);color:white}div#\:\$p>svg>foreignObject>section.extra a{color:rgb(145,255,209)}div#\:\$p>svg>foreignObject>section.exercise{background-color:#29366f;background-image:linear-gradient(to bottom,#20636a,#173742);color:white}div#\:\$p>svg>foreignObject>section.exercise a{color:rgb(211,173,255)} -/* @theme fa5agneqe2xxbat58gzzfpwqzuczahqrysq4tolfj */div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+/* @theme dil5c569ey7e10odkg3vpex7c4mrerdir64rpyfscbk */div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}

Static Members, Methods and Classes

-
-

Static Members

+
+

Static members

-
+

Non-static members

  • So far, we have used non-static fields in our classes
  • @@ -41,7 +41,7 @@
-
+
  • Likewise, non-static class methods have to be called through an instance:
    class MyAwesomeClass
     {
    @@ -66,7 +66,7 @@
     

-
+

Static members

  • Let's declare a property MyProperty with the static keyword
  • @@ -90,7 +90,7 @@

-
+

Static members: An example

  • In this example, a static field is used for keeping count on how many times the class has been instantiated:
    class Person
    @@ -112,7 +112,7 @@
     
-
+
  • Now let's instantiate a couple of persons and print their info:
@@ -135,10 +135,10 @@
-
+

Static methods

    -
  • Methods can also be static
  • +
  • Methods can also be static — for example, Console.WriteLine
  • What happens when you try to call a non-static method from a static method?
    class Program
     {
       void PrintHelloName(string name)
    @@ -157,7 +157,7 @@
     

-
+

Static classes

  • Whole classes can also be static
  • @@ -180,7 +180,7 @@
-
+

Exercise 1

    diff --git a/10-static-members-methods-and-classes.md b/10-static-members-methods-and-classes.md index a5c96dd..cbe3fd9 100644 --- a/10-static-members-methods-and-classes.md +++ b/10-static-members-methods-and-classes.md @@ -11,7 +11,7 @@ title: 10. Static Members, Methods and Classes -## Static Members +## Static members ### Non-static members @@ -140,7 +140,7 @@ class Program ## Static methods -* Methods can also be static +* Methods can also be static — for example, `Console.WriteLine` * What happens when you try to call a non-static method from a static method? ```csharp class Program diff --git a/6-methods-slides.html b/6-methods-slides.html new file mode 100644 index 0000000..cd5b94c --- /dev/null +++ b/6-methods-slides.html @@ -0,0 +1,361 @@ +6. Methods
    +

    Methods

    +
    +
    +

    Overview

    +
      +
    • Functions
    • +
    • Methods
    • +
    • Parameters
    • +
    • Return values
    • +
    • Scope of methods
    • +
    +
    +
    +

    What is a function?

    +
      +
    • Functions are self-contained modules of code that accomplish a specific task
    • +
    • Basically, a named block of code that can be executed as many times as we want +
        +
      • Instead of writing the same code over and over again, do it only once as a function, and call it many times
      • +
      +
      void Example()
      +{
      +    Console.WriteLine("Hello World");
      +}
      +
      +Example(); // calling the function three times
      +Example();
      +Example();
      +
      +
    • +
    +
    +
    +

    Parameters and returns

    +
      +
    • Functions can acquire data, a.k.a. parameters, from the caller
    • +
    • Functions can return data, a.k.a. its return value, to the caller
    • +
    • Defining parameters and return values are optional — not all functions have both, and some have neither!
    • +
    • Here's a function that takes in one parameter and returns nothing (hence, void)
      void PrintName(string param)
      +{
      +    Console.WriteLine("My name is " + param);
      +}
      +
      +
    • +
    +
    +
    +

    Function execution

    +

    When a function is called, the program leaves the current section of the code and begins to execute the first line of code inside the function.

    +
      +
    1. The program execution comes to the line of code where the function call is
    2. +
    3. The program enters the function
    4. +
    5. Instructions inside the function are executed from top to bottom
    6. +
    +
      +
    • Remember scopes: The variables defined inside the function are not visible outside the function!
    • +
    +
      +
    1. The program leaves the function and returns to the point where the function call was and continues the execution
    2. +
    3. If the function returned any data, it can be used where the function was called
    4. +
    +
    +
    +

    Methods vs functions

    +
      +
    • In C#, most functions we see are methods: functions that are inside a class
    • +
    • Even the main function is inside a class in C#, so it is a method + +
    • +
    • Here's the earlier function as a method inside the Program class
      class Program
      +{
      +  void PrintName(string param)
      +  {
      +    Console.WriteLine("My name is " + param);
      +  }
      +}
      +
      +
    • +
    +
    +
    +

    Calling methods

    +
      +
    • A method is executed only when it is called
    • +
    • Some methods are already predefined, so we can call them right away
    • +
    • For example, Console.WriteLine() is a method that contains code that prints stuff in the console +
        +
      • Instead of writing ourselves all that complex stuff the method contains, we just use the short method call Console.WriteLine()
      • +
      +
    • +
    • The use of methods reduces repetitive code, adds modularity and makes designing your programs easier
    • +
    +
    +
    +

    Methods: An example

    +
    +
    +
    class Program
    +{
    +  void PrintBlock()
    +  {
    +    Console.WriteLine("---------------------");
    +    Console.WriteLine("| This is cool but  |");
    +    Console.WriteLine("| you wouldn't want |");
    +    Console.WriteLine("| to write this     |");
    +    Console.WriteLine("| block of code     |");
    +    Console.WriteLine("| every time!       |");
    +    Console.WriteLine("---------------------");
    +  }
    +
    +  static void Main(string[] args)
    +  {
    +    PrintBlock();
    +    PrintBlock();
    +    PrintBlock();
    +  }
    +}
    +
    +
    +
    +

    +
    +
    +
    +
    +
      +
    • In the previous example, we declared a new method called PrintBlock
    • +
    • Then, the method was called three times +
        +
      • Each time the entire code inside the method was executed
      • +
      +
    • +
    • Why didn't we have to use the class name the method belonged to, unlike with Console.WriteLine? +
        +
      • Short answer: Because we called the method inside the class
      • +
      +
    • +
    • The void statement means that the method does not return anything +
        +
      • More on that later!
      • +
      +
    • +
    +
    +
    +

    Parameters

    +
      +
    • Sometimes you want to pass data into the method when calling it
    • +
    • This is done by adding parameters to the method declaration inside the parentheses:
      void PrintSum(int val1, int val2)
      +{
      +  int sum = val1 + val2;
      +  Console.WriteLine("Sum of " + val1 + " and " + val2 + " is " + sum);
      +}
      +
      +
    • +
    • The values to be passed are set as arguments in the method call inside the parentheses:
      PrintSum(2, 5);     // Outputs "Sum of 2 and 5 is 7
      +PrintSum(5, 5);     // Outputs "Sum of 5 and 5 is 10
      +
      +
    • +
    +
    +
    +

    Parameters: An example

    +
    +
    +
    static void Main(string[] args)
    +{
    +  int centuriesPrinted = 0;
    +  
    +  void PrintCentury(int century)
    +  {
    +    centuriesPrinted++;
    +    Console.WriteLine
    +      ("Current century: " + century);
    +    Console.WriteLine
    +      ("Total centuries printed: " + centuriesPrinted);
    +  }
    +
    +  for (int i = 0; i < 500; i += 100)
    +  {
    +    PrintCentury(i);
    +  }
    +}
    +
    +
    +
    +

    +

    Note that this method modifies a value that is outside the method, which is considered bad practice.

    +
    +
    +
    +
    +

    Optional parameters

    +
      +
    • You can give a parameter a default value by assigning it in the method declaration
    • +
    • This makes the parameter optional
      double CircleArea(double radius = 0)
      +{
      +  double area = Math.PI * radius * radius;
      +  return area;
      +}
      +Console.WriteLine(CircleArea());     // This outputs 0
      +Console.WriteLine(CircleArea(2));    // This outputs 12,56637...
      +
      +
    • +
    +
    +
    +

    Exercise 1

    + +
      +
    1. Write two methods Sum and Difference that both take in two parameters of type int, value1 and value2.
    2. +
    +
      +
    • Sum should print The sum of <value1> and <value2> is <sum>
    • +
    • Difference should print The difference of <value1> and <value2> is <difference>
    • +
    +
      +
    1. Call the methods from the main method multiple times with different arguments.
    2. +
    +
    +
    +

    Return Values

    +
      +
    • The return value of a method is returned with the return keyword:
      double CircleArea(double radius)
      +{
      +  double area = Math.PI * radius * radius;
      +  return area;
      +}
      +
      +double radius = 2;
      +double result = CircleArea(radius);
      +Console.WriteLine(result);    // Outputs 12,56637...
      +
      +
    • +
    • In the first examples, the method declarations started with the void keyword, which means that the method doesn't return anything
    • +
    • Here the method was declared as type double — now the method must return a double type variable
    • +
    +
    +
    +

    Note about shortening

    +
      +
    • The earlier code
      double radius = 2;
      +double result = CircleArea(radius);
      +Console.WriteLine(result);
      +
      +
    • +
    • can be shortened to
      double result = CircleArea(2);
      +Console.WriteLine(result);
      +
      +
    • +
    • and even further into
      Console.WriteLine(CircleArea(2));
      +
      +
    • +
    +
    +
    +

    Using tuples for multiple return values

    +
      +
    • It is possible to return multiple values in the form of a tuple:
      
      +(string, string) FirstAndLastName(string fullname)
      +{
      +  string[] names = fullname.Split(' ');
      +  return (names[0], names[names.Length - 1]);
      +}
      +
      +(string first, string last) = FirstAndLastName("Hans \"Dolph\" Lundgren");
      +
      +Console.WriteLine($"First name: {first}, last name: {last}");
      +// Outputs "First name: Hans, last name: Lundgren"
      +
      +
    • +
    • Note: If only one value from a tuple is needed, you can use a discard (_)
      // Only the last name is allocated to a variable
      +(_, string lastName) = FirstAndLastName("Arnold Alois Schwarzenegger");
      +
      +
    • +
    +
    +
    +

    Scope of methods

    +
      +
    • +

      The variables declared inside a method are local variables and only accessible inside the method

      +
      void ScopeExample()
      +{
      +  // Variable 'a' is only accessible inside of this method
      +  int a = 10;
      +  a = 20;         // This works
      +}
      +a = 30;             // This throws an error
      +
      +
    • +
    • +

      Contrastingly, variables declared outside the method are available inside, as seen in an earlier example

      +
    • +
    +
    +
    +

    Exercise 2

    + +
      +
    1. Write a method that takes a string as a parameter and prints the total number of spaces in that string.
    2. +
    3. Without using the string.Trim() method, modify the method so that it removes the spaces in a string and returns a new string.
    4. +
    +

    Hint: You can iterate a string just like arrays and lists.

    +

    +
    +
    +

    Exercise 3

    +
    +
    +
      +
    1. Write a method that takes in a string as a parameter and prints each unique letter in that string.
    2. +
    3. Write a new method that takes a string as a parameter and prints the number of each unique letter in the string.
    4. +
    +
    +
    +

    +
    +
    +
    +
    +

    Exercise 4

    + +
      +
    • Write a method that takes in a 10-digit number as a parameter and divides individual digits into two arrays of even and odd digits. The method should return both arrays.
    • +
    • Remember to check that method only accepts numbers!
    • +
    +
    +
    +

    Exercise 5

    + +
      +
    • Fix this example that utilized a bad practice where a variable declared outside the function is modified inside the function.
    • +
    • So instead, take in the centuriesPrinted variable as another parameter, modify it in the function, and then return it.
    • +
    +
    +
    +

    Assignments

    +

    Assignments about this topic can be found here

    +
    +
    \ No newline at end of file diff --git a/6-methods.md b/6-methods.md index 2a8edad..34ff709 100644 --- a/6-methods.md +++ b/6-methods.md @@ -1,270 +1,320 @@ -# Methods - -![](imgs/6%20Methods_0.png) - --- - -# Overview - -Functions - -Methods - -Parameters - -Return Values - -Scope of Methods - -# What is a function? - -* Functions are self contained modules of code that accomplish a specific task. -* Function is basically a block of code that can be executed over and over again in the program - * Instead of writing the same code over and over again to the program, it can be written only once as a function -* Functions can get data, _parameters_ , from the _caller_ -* Functions can return data, _return value_ , to the caller -* Defining parameters and return values are optional, not all functions have both and some have neither! - -# Function execution - -* When a function is called the program leaves the current section of the code and begins to execute the first line of code inside the function. -* The program execution comes to the line of code where the function call is -* The program enters the function -* Instructions inside the function are executed from top to bottom - * Remember scopes: The variables defined inside the function are not visible outside the function! -* The program leaves the function and returns to the point where the function call was and continues the execution -* If function returned any data, it can be used where the function was called +marp: true +paginate: true +math: mathjax +theme: buutti +title: 6. Methods +--- # Methods -In C#, __methods __ are functions which are inside of a class - -Since the main function is inside of a class, all functions in C# are actually just called methods - -* A methods are executed only when it is __called__ -* For example, Console.WriteLine() is a method which contains more complex code to print stuff on to the console - * Instead of writing all that complex stuff at every printout, you can just use the short method call Console.WriteLine() + + + +## Overview + +* Functions +* Methods +* Parameters +* Return values +* Scope of methods + +## What is a function? + +* Functions are self-contained modules of code that accomplish a specific task +* Basically, a named block of code that can be executed as many times as we want + * Instead of writing the same code over and over again, do it only once as a function, and ***call*** it many times + ```csharp + void Example() + { + Console.WriteLine("Hello World"); + } + + Example(); // calling the function three times + Example(); + Example(); + ``` + +### Parameters and returns + +* Functions can acquire data, a.k.a. **_parameters_**, from the **_caller_** +* Functions can return data, a.k.a. its **_return value_**, to the caller +* Defining parameters and return values are optional — not all functions have both, and some have neither! +* Here's a function that takes in one parameter and returns nothing (hence, `void`) + ```csharp + void PrintName(string param) + { + Console.WriteLine("My name is " + param); + } + ``` + +## Function execution + +When a function is called, the program leaves the current section of the code and begins to execute the first line of code inside the function. +1) The program execution comes to the line of code where the function call is +2) The program enters the function +3) Instructions inside the function are executed from top to bottom + * Remember scopes: The variables defined inside the function are not visible outside the function! +4) The program leaves the function and returns to the point where the function call was and continues the execution +5) If the function returned any data, it can be used where the function was called + +### Methods vs functions + +* In C#, most functions we see are *__methods__*: functions that are inside a ***class*** +* Even the main function is inside a class in C#, so it is a method + * Classes are explained in [Lecture 7](7-classes-and-objects) +* Here's the earlier function as a method inside the `Program` class + ```csharp + class Program + { + void PrintName(string param) + { + Console.WriteLine("My name is " + param); + } + } + ``` + + +### Calling methods + +* A method is executed only when it is *__called__* +* Some methods are already predefined, so we can call them right away +* For example, `Console.WriteLine()` is a method that contains code that prints stuff in the console + * Instead of writing ourselves all that complex stuff the method contains, we just use the short method call `Console.WriteLine()` * The use of methods reduces repetitive code, adds modularity and makes designing your programs easier -# Methods - Example +### Methods: An example -![](imgs/6%20Methods_1.png) +
    +
    +```csharp class Program - -{ - -static void Main(string[] args) - -{ - -void PrintBlock() - -{ - -Console.WriteLine("---------------------"); - -Console.WriteLine("| This is cool but |"); - -Console.WriteLine("| you wouldn't want |"); - -Console.WriteLine("| to write this |"); - -Console.WriteLine("| block of code |"); - -Console.WriteLine("| every time! |"); - -Console.WriteLine("---------------------"); - -} - -PrintBlock(); - -PrintBlock(); - -PrintBlock(); - -} - -} - -* In this example, we declared a new method called PrintBlock -* Finally the method was called three times -* Each time the entire code inside the method was executed -* The void statement means that the method does not return anything - * More on that later - -# Parameters - -Sometimes you want to pass data into the method when calling it - -This is done by adding __parameters __ to the method declaration, inside the brackets: - -void PrintSum(int val1, int val2) - { - -int sum = val1 + val2; - -Console.WriteLine("Sum of " + val1 + " and " + val2 + " is " + sum); - + void PrintBlock() + { + Console.WriteLine("---------------------"); + Console.WriteLine("| This is cool but |"); + Console.WriteLine("| you wouldn't want |"); + Console.WriteLine("| to write this |"); + Console.WriteLine("| block of code |"); + Console.WriteLine("| every time! |"); + Console.WriteLine("---------------------"); + } + + static void Main(string[] args) + { + PrintBlock(); + PrintBlock(); + PrintBlock(); + } } +``` -The values to be passed are set as __arguments __ in the method call, inside the brackets: +
    +
    -PrintSum(2, 5); // Outputs "Sum of 2 and 5 is 7 - -PrintSum(5, 5); // Outputs "Sum of 5 and 5 is 10 +![](imgs/6%20Methods_1.png) -# Parameters - Example +
    +
    -![](imgs/6%20Methods_2.png) +--- +* In the previous example, we declared a new method called `PrintBlock` +* Then, the method was called three times + * Each time the entire code inside the method was executed +* Why didn't we have to use the class name the method belonged to, unlike with `Console.WriteLine`? + * Short answer: Because we called the method inside the class +* The `void` statement means that the method does not return anything + * More on that later! + +## Parameters + +* Sometimes you want to pass data into the method when calling it +* This is done by adding *__parameters__* to the method declaration inside the parentheses: + ```csharp + void PrintSum(int val1, int val2) + { + int sum = val1 + val2; + Console.WriteLine("Sum of " + val1 + " and " + val2 + " is " + sum); + } + ``` +* The values to be passed are set as ***arguments*** in the method call inside the parentheses: + ```csharp + PrintSum(2, 5); // Outputs "Sum of 2 and 5 is 7 + PrintSum(5, 5); // Outputs "Sum of 5 and 5 is 10 + ``` + +### Parameters: An example + +
    +
    + +```csharp static void Main(string[] args) - -{ - -int centuriesPrinted = 0; - -void PrintCentury(int century) - -{ - -centuriesPrinted++; - -Console.WriteLine("Current century: " + century); - -Console.WriteLine("Total centuries printed: " + centuriesPrinted); - -} - -for (int i = 0; i < 500; i += 100) - -{ - -PrintCentury(i); - -} - -} - -# Optional Parameters - -You can give a parameter a default value by assigning it in the method declaration - -This makes the parameter optional - -double CircleArea(double radius = 0) - -{ - -double area = Math.PI * radius * radius; - -return area; - -} - -Console.WriteLine(CircleArea()); // This outputs 0 - -Console.WriteLine(CircleArea(2)); // This outputs 12,56637... - -# Exercise 1 - -Write two methods Sum and Difference, which both have two parameters of type int, named value1 and value2. Sum should print "The sum of __*value1*__ and __*value2*__ is __*sum*__ ", and Difference should print "The difference of __*value1*__ and __*value2*__ is __*difference*__ . - -Call the methods from the main method multiple times with different values. - -# Return Values - -The return value of a method is __returned __ with the return keyword: - -double radius = 2; - -Console.WriteLine(CircleArea(radius)); // Outputs 12,56637... - -double CircleArea(double radius) - -{ - -double area = Math.PI * radius * radius; - -return area; - -} - -In the first examples, the method declarations started with the void expression, which means that the method doesn't return anything - -Here the method was declared as type double, which means that the method has to return a variable of type double - -# Multiple Return Values - -It is possible to return multiple values in the form of a __tuple__ : - -(string, string) FirstAndLastName(string fullname) - { - -string[] names = fullname.Split(' '); - -return (names[0], names[names.Length - 1]); - + int centuriesPrinted = 0; + + void PrintCentury(int century) + { + centuriesPrinted++; + Console.WriteLine + ("Current century: " + century); + Console.WriteLine + ("Total centuries printed: " + centuriesPrinted); + } + + for (int i = 0; i < 500; i += 100) + { + PrintCentury(i); + } } +``` -(string first, string last) = FirstAndLastName("Hans \\"Dolph\\" Lundgren"); - -Console.WriteLine($"First name: {first}, last name: {last}"); - -// Outputs "First name: Hans, last name: Lundgren" +
    +
    -If only one value from a tuple is needed, you can use a __discard __ (\_) - -// Only last name is allocated to a variable - -(\_, string lastName) = FirstAndLastName("Arnold Alois Schwarzenegger"); - -# Scope of Methods - -The variables declared inside of a method are __local variables__ and only accessible inside of that method +![](imgs/6%20Methods_2.png) -void ScopeExample() +Note that this method modifies a value that is ***outside*** the method, which is considered bad practice. + +
    +
    + +## Optional parameters + +* You can give a parameter a default value by assigning it in the method declaration +* This makes the parameter optional + ```csharp + double CircleArea(double radius = 0) + { + double area = Math.PI * radius * radius; + return area; + } + Console.WriteLine(CircleArea()); // This outputs 0 + Console.WriteLine(CircleArea(2)); // This outputs 12,56637... + ``` + +## Exercise 1 + + +1) Write two methods `Sum` and `Difference` that both take in two parameters of type `int`, `value1` and `value2`. + * `Sum` should print `The sum of and is ` + * `Difference` should print `The difference of and is ` +2) Call the methods from the main method multiple times with different arguments. + +## Return Values + +* The return value of a method is *__returned__* with the `return` keyword: + ```csharp + double CircleArea(double radius) + { + double area = Math.PI * radius * radius; + return area; + } + + double radius = 2; + double result = CircleArea(radius); + Console.WriteLine(result); // Outputs 12,56637... + ``` +* In the first examples, the method declarations started with the `void` keyword, which means that the method doesn't return anything +* Here the method was declared as type `double` — now the method ***must*** return a `double` type variable -{ +### Note about shortening -// Variable 'a' is only accessible inside of this method +* The earlier code + ```csharp + double radius = 2; + double result = CircleArea(radius); + Console.WriteLine(result); + ``` +* can be shortened to + ```csharp + double result = CircleArea(2); + Console.WriteLine(result); + ``` +* and even further into + ```csharp + Console.WriteLine(CircleArea(2)); + ``` -int a = 10; +## Using tuples for multiple return values -a = 20; // This works +* It is possible to return multiple values in the form of a *__tuple__*: + ```csharp -} + (string, string) FirstAndLastName(string fullname) + { + string[] names = fullname.Split(' '); + return (names[0], names[names.Length - 1]); + } -a = 30; // This throws an error + (string first, string last) = FirstAndLastName("Hans \"Dolph\" Lundgren"); -# Exercise 2 + Console.WriteLine($"First name: {first}, last name: {last}"); + // Outputs "First name: Hans, last name: Lundgren" + ``` +* ***Note:*** If only one value from a tuple is needed, you can use a *__discard__* (`_`) + ```csharp + // Only the last name is allocated to a variable + (_, string lastName) = FirstAndLastName("Arnold Alois Schwarzenegger"); + ``` -Write a method that takes a string as a parameter and prints the total number of spaces in that string. +## Scope of methods -Without using the string.Trim() method, modify the method so that it removes the spaces in a string and returns the new string. +* The variables declared inside a method are *__local variables__* and only accessible inside the method + ```csharp + void ScopeExample() + { + // Variable 'a' is only accessible inside of this method + int a = 10; + a = 20; // This works + } + a = 30; // This throws an error + ``` -(Hint: You can iterate a string just like arrays and lists.) +* Contrastingly, variables declared outside the method are available inside, as seen in an earlier [example](#parameters-an-example) -![](imgs/6%20Methods_3.png) +## Exercise 2 + + +1) Write a method that takes a string as a parameter and prints the total number of spaces in that string. +2) Without using the `string.Trim()` method, modify the method so that it removes the spaces in a string and returns a new string. + +***Hint:*** You can iterate a string just like arrays and lists. + +![w:900](imgs/6%20Methods_3.png) + +## Exercise 3 + + +
    +
    -# Exercise 3 +1) Write a method that takes in a string as a parameter and prints each unique letter in that string. +2) Write a new method that takes a string as a parameter and prints the number of each unique letter in the string. -Write a method that takes a string as a parameter and prints each unique letter in that string. +
    +
    -Write a new method that takes a string as a parameter and prints the number of each unique letter in the string. +![w:400](imgs/6%20Methods_4.png) -![](imgs/6%20Methods_4.png) +
    +
    -# Exercise 4 +## Exercise 4 + -Write a method that takes a 10 digit number as a parameter and divides individual digits into even and odd arrays. Method should return both arrays. +* Write a method that takes in a 10-digit number as a parameter and divides individual digits into two arrays of even and odd digits. The method should return both arrays. +* Remember to check that method only accepts numbers! -Remember to check that method accepts only numbers. +## Exercise 5 + -# Assignments +* Fix this [example](#parameters-an-example) that utilized a bad practice where a variable declared outside the function is modified inside the function. +* So instead, take in the `centuriesPrinted` variable as another parameter, modify it in the function, and then return it. -[Assignments about this topic can be found here](https://gitea.buutti.com/education/academy-assignments/src/branch/master/C%23%20Basics/6.%20Methods) +## Assignments +[Assignments about this topic can be found here](https://gitea.buutti.com/education/academy-assignments/src/branch/master/C%23%20Basics/6.%20Methods) \ No newline at end of file