# 000128. Как делать функции c#- Часть 1

Как делать функции c#? Часть 1||wmysterio|wmysterio|<wmysterio@yandex.ru>|||Всем очередной привет! Сегодня я попытаюсь объяснить вам ещё одну важную тему - функции в c#.\
Начнём с того, как пишется функция в целом. Как правило функции имеют следующий синтаксис написания:<br>

| <p>СпецификаторДоступа ТипВозврата ИмяФункции ( Параметры ) {<br>    return Возвращаемый параметр;<br>}<br></p> |
| --------------------------------------------------------------------------------------------------------------- |

\- СпецификаторДоступа - являет собою область видимости функции среди других объектов или объекта. Насколько я знаю есть 4 спецификатора: public, protected, private и internal. Пока на деталях не буду останавливаться. Расскажу как нибудь в другой раз.- ТипВозврата - указываем какой тип будет возвращать наша функция командой return.- ИмяФункции - указываем уникальное имя для нашей функции- Параметры - Перечень всех параметров, которые передаются в функцию. Если параметров несколько, то между ними ставится запятая. Каждый параметр должен начинаться со своего типа данный и локальную переменную, которая известна только самой функции.- return - оператор возвращает некое значение после выполнения функции. Тип данных это значения должен совпадать с ТипомВозврата.- Возвращаемый параметр - непосредственно сам параметр. Обычно он создаётся в области функции.Среди типов данных, возвращаемых функциями можно выделить все стандартные типы данных (например: int, float и.т.п.). Но есть один тип, который вовсе не возвращает значений. Это тип - void. В народе он ещё известный, как "пустой" тип. Если функция имеет возвращающий тип "пустой", то оператор return должен завершать следующим образом:

| <p>return;<br></p> |
| ------------------ |

просто не указывая возвращаемого параметра. В основном этого оператора не пишут при "пустом" типе, так как функция будет работать и без него. Такой вид функции называют **процедурой**.\
\
Что-же, оставим теорию и напишем простой пример функции:

| <p>public int Summ(int x, int y) {<br>     return x + y;<br>}<br></p> |
| --------------------------------------------------------------------- |

Функция Summ принимает два параметра - 2 числа типа int. Функция не интересуется какие это будут значения. Она работает как шаблон. Возвращает сумму этих чисел. Я написал простой пример в консоли с использованием этой функции:

| <p>using System;<br><br>namespace Consol {<br>    class Program {<br>        static void Main() {<br>            Console.WriteLine("Введите 2 числа");<br>            int a, b, c;<br>            a = int.Parse( Console.ReadLine() );<br>            b = int.Parse( Console.ReadLine() );<br>            c = Summ(a, b);<br>            Console.WriteLine("{0}", c);<br>            Console.ReadKey();<br>        }<br><br>        private static int Summ(int x, int y) {<br>            return x + y;<br>        }<br>    }<br>}<br></p> |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Результат:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/31411493.png)\
Важно! Хочу обратить ваше внимание на команду **int.Parse(string)**. Она пытается преобразовать указанную стоку в число. Применяется практически ко всем числовым типам данных. Иногда бывает полезно использовать её.\
\
Хорошая вещь в высокоуровневых языках программирования - можно подставлять в параметры функций целые выражения. например можно сократить наш код до следующего вида:

| <p>static void Main() {<br>    Console.WriteLine("Введите 2 числа");<br>    int c;<br>    c = Summ( int.Parse( Console.ReadLine() ), int.Parse( Console.ReadLine() ) );<br>    Console.WriteLine("Результат: {0}", c);<br>    Console.ReadKey();<br>}<br></p> |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

К тому же, можно ещё не использовать переменную c, а подставить результат выражения Summ напрямик в вывод:

| <p>static void Main() {<br>    Console.WriteLine("Введите 2 числа");<br>    Console.WriteLine("Результат: {0}", Summ( int.Parse( Console.ReadLine() ), int.Parse( Console.ReadLine() ) ) );<br>    Console.ReadKey();<br>}<br></p> |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Главное неудобство думаю очевидно - очень неудобно читать код на экранах с низким расширением. Но есть способ извлечь пользу - перенос строк! Да-да! Если в Sanny Builder мы не можем сделать этого, то шарп очень даже поймёт эту команду:<br>

| <p>static void Main() {<br>    Console.WriteLine("Введите 2 числа");<br>    Console.WriteLine("Результат: {0}",<br>                                    Summ( int.Parse( Console.ReadLine() ),<br>                                                 int.Parse( Console.ReadLine() ) ) );<br>    Console.ReadKey();<br>}<br></p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Просто перенесли часть кода на нижние строки и стало очень удобно. :)\
Важно! Думаю вы заметили это - {0}, и у Вас возникнут вопросы, типа "Что это? Для чего?". Могу ответить на подобные вопросы. Это вывод некой переменной в строке. Число в скобках указывает порядок вывода, начинается с нуля. Далее нужно указать параметры через запятую. Количество параметров должно совпадать. Простой пример:

| <p>Console.WriteLine("Праметр0 {0}, Праметр1 {1}, Праметр2 {2}", параметр0, параметр1, параметр2);<br></p> |
| ---------------------------------------------------------------------------------------------------------- |

С этим вроде разобрались. Едем дальше :)\
\
Наведу пример процедуры:

| <p>using System;<br><br>namespace Consol {<br>    class Program {<br>        static void Main() {<br>            Console.WriteLine("Введите 2 числа");<br>            Summ( int.Parse( Console.ReadLine() ) , int.Parse( Console.ReadLine() ) );<br>            Console.ReadKey();<br>        }<br><br>        private static void Summ(int x, int y) {<br>            Console.WriteLine("Результат: {0}", x + y);<br>        }<br>    }<br>}<br></p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Теперь мы передаём только считанные числа. Вывод суммы уже делает процедура. Результат тот-же:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/04550223.png)\
Мы можем сократить наш код, делая его читабильнее. В качестве параметром функция будет принимать строковые значения. Преобразование в число будет идти в процедуре:

| <p>        static void Main() {<br>            Console.WriteLine("Введите 2 числа");<br>            Summ( Console.ReadLine(), Console.ReadLine() );<br>            Console.ReadKey();<br>        }<br><br>        private static void Summ(string x, string y) {<br>            Console.WriteLine("Результат: {0}", int.Parse(x) + int.Parse(y) );<br>        }<br></p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Результат тот-же:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/81146469.png)\
Это только малая часть с того, что можно творить с функциями. В следующих частях мы коснёмся темы перегрузки функций, рекурсии и.т.п.\
\
А пока поэкспериментируйте с функциями, что бы "Набить руку", если конечно вы только ознакомляетесь с ними ![smile](http://s49.ucoz.net/sm/15/smile.gif)|865|1|0|31411493`png`259`122\|04550223`png`182`96|81146469`png`140\`78||kak\_delat\_funkcii\_c\_chast\_1|1392798749


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00300/00100/000128.-kak-delat-funkcii-c-chast-1.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
