You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
271 lines
6.5 KiB
Markdown
271 lines
6.5 KiB
Markdown
# 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.
|
|
* 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
|
|
|
|
# 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()
|
|
* The use of methods reduces repetitive code, adds modularity and makes designing your programs easier
|
|
|
|
# Methods - Example
|
|
|
|

|
|
|
|
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);
|
|
|
|
}
|
|
|
|
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
|
|
|
|
# Parameters - 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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
# 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]);
|
|
|
|
}
|
|
|
|
(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
|
|
|
|
void ScopeExample()
|
|
|
|
{
|
|
|
|
// Variable 'a' is only accessible inside of this method
|
|
|
|
int a = 10;
|
|
|
|
a = 20; // This works
|
|
|
|
}
|
|
|
|
a = 30; // This throws an error
|
|
|
|
# Exercise 2
|
|
|
|
Write a method that takes a string as a parameter and prints the total number of spaces in that string.
|
|
|
|
Without using the string.Trim() method, modify the method so that it removes the spaces in a string and returns the new string.
|
|
|
|
(Hint: You can iterate a string just like arrays and lists.)
|
|
|
|

|
|
|
|
# Exercise 3
|
|
|
|
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.
|
|
|
|

|
|
|
|
# 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.
|
|
|
|
Remember to check that method accepts only numbers.
|
|
|
|
# Assignments
|
|
|
|
[Assignments about this topic can be found here](https://gitea.buutti.com/education/academy-assignments/src/branch/master/C%23%20Basics/6.%20Methods)
|
|
|