45
2013 Copyright © 2013 DAVID Holding Company Курс по програмиране на C# Занятие №4 Функции и методи. Често използвани методи

Курс по програмиране на C#

  • Upload
    enya

  • View
    78

  • Download
    3

Embed Size (px)

DESCRIPTION

Курс по програмиране на C#. Занятие № 4 Функции и методи. Често използвани методи. Съдържание 1/2. Функции и методи Контрол на изпълнението Видимост на променливите Методи без връщана стойност Методи с връщана стойност Ограничения Параметри Референтни параметри Изходящи параметри - PowerPoint PPT Presentation

Citation preview

Page 1: Курс по програмиране на C#

2013Copyright © 2013 DAVID Holding Company

Курс по програмиране на C#Занятие №4

Функции и методи. Често използвани методи

Page 2: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Съдържание 1/2• Функции и методи– Контрол на изпълнението– Видимост на променливите– Методи без връщана стойност– Методи с връщана стойност– Ограничения

• Параметри– Референтни параметри– Изходящи параметри– Масиви от параметри

Page 3: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Съдържание 2/2• Аргументи– Незадължителни аргументи– Именувани аргументи

• Презаписване на методи• Често използвани методи– Символни низове– Превръщане на данни– Работа с файлове– Работа с масиви– Работа с конзола– Други методи

Page 4: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Функции и методи• Какво е „функция“? Какво е „метод“?– Функция е подпрограма, която извършва конкретна дейност и

може да бъде извиквана от друга част от програмата– Функциите могат да приемат един или повече параметри– Функциите могат да връщат единична стойност като резултат– Аргумент е стойността подавана на даден параметър– Метод е функция дефинирана в рамките на клас или структура– Процедури наричаме функции, които не връщат резултат– В езика C# методът е единственият начин за дефиниране на

функции

Page 5: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Функции и методи• Приложение на функциите– Разбиване на приложението на по-конкретни задачи– Преизползване на програмния код– Разделяне на отговорностите и по-добра поддръжка– Подобрена разбираемост на кода

• BCL представлява библиотека от методи подпомагащи разработчика в създаването на приложения без това да става от нулата

Page 6: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Функции и методи• Характеристики на методите– Наименование– Брой и тип на параметрите– Връщана стойност– Клас, в който методът е дефиниран

• Сигнатура на метод– Наименование– Ред, вид и тип на параметрите

• Наименованието на метода трябва да отразява неговото предназначение

• В един и същи клас не може да има повече от един метод с една и съща сигнатура

Page 7: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Функции и методи// метод без параметри и резултатvoid Run(){ // prison break}// метод с параметър без резултатvoid Notify(string message){ // изпраща уведомления по e-mail}// метод с два параметъра и резултатint Sum(int a, int b){ int c = a + b; return c;}

• Деклариране на методи– Тип на данните на връщаната

стойност (или “void” ако няма такава)

– Наименование– Описание на параметрите– Тяло на метода

Page 8: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Функции и методи// извикване на метод без параметър// (след атомна бомба - нищо)DropNuclearBomb();// извикване на метод с параметър// (или „да изчезнеш за 60 секунди“)SetBombTimer(60);// извикване на метод с няколко// параметъраPlantBomb(here, “Ahmet”);// използване на резултатint sum = Sum(a, b);// префиксиране с наименование на класConsole.WriteLine(“Kaboom!”);

• Използване на методи– Наименование на клас или

обект, ако методът е деклариран в друг клас

– Наименованието на метода– Списък от аргументи

Page 9: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Контрол на изпълнението• Изпълнението на метод започва при неговото извикване• Изпълнението на метод приключва:– при достигане на края му– при достигане на ключовата дума „return”– при възникване на грешка

• След изпълнение на метод, изпълнението продължава от мястото, на което е бил извикан

Page 10: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Видимост на променливитеvoid GimmeFive(){ // локална променлива “five” int five = 5; // използване на локална променлива Console.WriteLine(“Hi {0}!”, five); // къде отиваш ти, може би?! string five = “Five”;}

Console.WriteLine(five); // Ко?! Не!

• Локални променливи за един метод са тези декларирани в неговото тяло

• В тялото на един метод не могат да бъдат декларирани повече от една променливи с едно и също наименование

• Локалните променливи не могат да бъдат достъпвани извън метода

• Параметрите имат статут на локални променливи

Page 11: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Методи без връщана стойностvoid DoSomethingNerd(WeatherInfo info){ // ако времето не е хубаво… if (!IsWeatherFine(info)) return; // да порешаваме задачи! SolveSomeMathsProblems();}

• Когато методът не връща резултат, изпълнението приключва:– при достигане на края му– при достигане на ключовата

дума “return”– при възникване на грешка

Page 12: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Методи с връщана стойностint Sum(int a, int b){ int c = a + b; // Назад, назад, моме, Калино! return c;}

// взима дискриминантата на кв. у-еdouble GetDiscriminant( double a, double b, double c){ return b * b – 4 * a * c;}

• Когато методът връща резултат, изпълнението приключва:– при използване на ключовата

дума „return” следвана от израз

– при възникване на грешка• След ключовата дума

„return” задължително трябва да има израз, който връща стойност от същия тип, като резултата от метода

Page 13: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Методи връщащи стойност// имаме триъгълник със страни…double a = 5, b = 3, c = 2;// забравете, че сте видели това:double s = Math.Sqrt( GetSemiperimeter(a, b, c) * (GetSemiperimeter(a, b, c) – a) * (GetSemiperimeter(a, b, c) – b) * (GetSemiperimeter(a, b, c) – c));// по-добре го напишете така:double p = GetSemiperimeter(a, b, c);s = Math.Sqrt(p*(p-a)*(p-b)*(p-c));// накрая, разбира се:Console.WriteLine(”Лицето е {0}.”, s);

• Извиквания към методи връщащи стойност могат да бъдат използвани в изрази– В изрази извикването на

метода се заменя със стойността на върнатия от него резултат

Page 14: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Параметри// параметър от стойностен типvoid CountBackwards(int n){ for (; n > 0; n--) Console.WriteLine(n);}

// променлива от стойностен типint n = 100;

// използване на стойностен аргументCountBackwards(n);

// какво ще изпише тук?Console.WriteLine(n);

• Параметър от стойностен тип– Параметърът взима

стойността от съответния аргумент

– При изпълнение на метода, стойността на аргумента се запазва

Page 15: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Параметри// масивите са от референтен типint[] arr = new [] { 1, 3, 2, 10, 0 };

// извикваме метод за сортиранеArray.Sort(arr);

// след извикването, масивът си е// останал на същото място в паметта,// но пък сортиран

• Параметър от референтен тип– Параметърът взима

референцията от съответния аргумент

– При изпълнение на метода, референциите на аргумента се запазват, но не винаги и съхранените зад тях данни

Page 16: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Параметри// правим си „референтно“ хлапе ИванчоPerson kid = new Person(“Иванчо”);

// Иванчо е слушал и отива да си играеPlay(kid);// Иванчо скача на въже… // … и чупи два шийни прешлена

// Но, въпреки това, той е същият// Иванчо, който е отишъл да си играе…ShowCervicalVertebrae(kid);

// … просто явно е останал с пет// функциониращи шийни прешлена

• Параметър от референтен тип– Да си припомним Иванчо!

• Но по-подробно с Иванчо и други (референтни) типове ще се запознаем по-късно в курса

Page 17: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Функции и методи - демо// демонстрация

Page 18: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Ограничения// методът ни връща масивstring[] GetCourseInfo(){ return new[] { // наименование на курса “Курс по програмиране на C#”, // наименование на организацията “ДАВИД академия”, };}string[] info = GetCourseInfo();Console.WriteLine( “Курс: {0}; Организация: {1}”, info[0], info[1]);// … и сега добавете годината!

• Методите могат да връщат само една стойност

• Ако искаме да върнем повече?!– масиви– структури– обекти– референтни параметри– изходящи параметри

Page 19: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Референтни параметри// деклариранеvoid GetCourseInfo(ref string course, ref string organisation, ref int year){ course = “Програмиране на C#”; organisation = “ДАВИД академия”;}

• Позволяват предаването на аргументите по референция, а не по стойност

• Възможност за промяна на аргумента в извиквания метод

• Възможност за връщане на повече от една стойност чрез използване на няколко аргумента

• Декларират се с поставяне на ключовата дума „ref” пред дефиницията на параметъра

Page 20: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Референтни параметри// деклариранеvoid GetCourseInfo(ref string course, ref string organisation, ref int year){ course = “Програмиране на C#”; organisation = “ДАВИД академия”;}// използванеstring courseName = null;string organisationName = null;int year = 2013;GetCourseInfo(ref courseName, ref organisationName, ref year);

• Използват се с поставяне на ключовата дума „ref” пред аргумента

• Аргументът трябва да е предварително декларирана променлива от същия тип

• Аргументът трябва да има предварително присвоена стойност

• Извикването не гарантира, че в метода ще се присвои стойност на аргумента

Page 21: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Изходни параметри// деклариранеvoid GetCourseInfo(out string course, out string organisation, out int year){ course = “Програмиране на C#”; organisation = “ДАВИД академия”; year = 2013;}

• Позволяват връщането на стойност в подаден (изходен) параметър

• Задължителна промяна на аргумента в извиквания метод

• Възможност за връщане на повече от една стойност чрез използване на няколко аргумента

• Декларират се с поставяне на ключовата дума „out” пред дефиницията на параметъра

Page 22: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Изходни параметри// деклариранеvoid GetCourseInfo(out string course, out string organisation, out int year){ course = “Програмиране на C#”; organisation = “ДАВИД академия”; year = 2013;}// използванеstring courseName;string organisationName;int year;GetCourseInfo(out courseName, out organisationName, out year);

• Използват се с поставяне на ключовата дума „out” пред аргумента

• Аргументът трябва да е предварително декларирана променлива от същия тип

• Не е нужно аргументът да има предварително присвоена стойност

• Извикването гарантира, че в метода ще се присвои стойност на аргумента

Page 23: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Масиви от параметриstring message;// извикване с два аргументаmessage = string.Format( “Курс {0}”, courseName);// извикване с три аргументаmessage = string.Format( “Курс {0} на {1}”, courseName, organisationName);// извикване с четири аргументаmessage = string.Format( “Курс {0} ({2}) на {1}”, courseName, organisationName, year);// де факто могат да бъдат произволен брой

• Не винаги е известно с колко параметъра ще бъде извикан даден метод

• Например string.Format!• Какво да правим?!

Page 24: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Масиви от параметри// деклариранеvoid ShowContent(string title, params string[] lines){ Console.WriteLine(“Title: {0}”, title); for (int i = 0; i < lines.Length; i++) { Console.WriteLine(“{0}: {1}”, i, lines[i]); }}

• Произволен брой параметри на метод указваме с масив от параметри

• Декларират се с поставяне на ключовата дума „params” пред дефиницията на първия параметъра

• Този параметър трябва да е едномерен масив от типа параметри, които очакваме

• В тялото на метода работим с параметрите като с масив

Page 25: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Масиви от параметри// деклариранеvoid ShowContent(string title, params string[] lines){ Console.WriteLine(“Title: {0}”, title); for (int i = 0; i < lines.Length; i++) { Console.WriteLine(“{0}: {1}”, i, lines[i]); }}

• След масив от параметри не може да има други параметри

• Дефиницията на един метод може да декларира само един масив от параметри

Page 26: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Масиви от параметри// деклариранеvoid ShowContent(string title, params string[] lines){ Console.WriteLine(“Title: {0}”, title); for (int i = 0; i < lines.Length; i++) { Console.WriteLine(“{0}: {1}”, i, lines[i]); }}// използване с аргументиShowContent(“Day 1”, “My dead diary,”, “I wrote yet another C# program!”);// използване с масивShowContent(“Program.cs”, File.ReadAllLines(“Program.cs”));

• Извикването става с подаване на 0 или повече параметъра от типа на елементите в декларирания аргумент

• Като параметър можем да подадем и обикновен масив

Page 27: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Незадължителни аргументи// деклариране на метод с// незадължителни аргументиvoid SendEmail( string text, string subject = null, string from = null){ // …}

// използване на метод с// незадължителен аргументSendEmail(“Hi, there!”);

• Незадължителни аргументи– Деклариране: на параметъра

се задава стойност по подразбиране

– Използване: за стойност на пропуснатите аргументи се използва стойността по подразбиране на съответния параметър

Page 28: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Именувани аргументи// деклариране на метод с// незадължителни аргументиdouble GetRectangleSurface( double width, double height = 0.0d){ return width * height;}// използване на именувани аргументиdouble s = GetRectangleSurface( height: 1.0d, width: 0.5d);// използване на именувани и// незадължителни аргументиs = GetRectangleSurface(width: 0.5d);

• Именувани аргументи– Използване: споменава се

наименованието на параметъра, за който се подава стойност

• Правила за използване– Редът на именуваните

аргументи не е от значение– Именувани аргументи могат

да следват позиционни аргументи

– След именувани аргументи не могат да се използват позиционни аргументи

Page 29: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Презаписване на методиvoid F(); // F()void F(int x); // F(int)void F(ref int x); // F(ref int)void F(int x, int y); // F(int, int)int F(string s); // F(string)int F(int x); // F(int)void F(string[] a); // F(string[])void F(params string[] a); // F(string[])

// ЗАБЕЛЕЖКА: сигнатурите не могат да се// различават само по думите „ref” и “out”void F(out int x); // F(out int)

• Презаписването на методи е възможността в една област да бъдат декларирани повече от един метод с едно и също наименование, но различна сигнатура

• Какво е сигнатура на метод?!– Включва наименованието му,

типа и вида на параметрите и техния ред

– Не включва връщания тип данни и ключовата дума “params”

Page 30: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Методи, параметри, аргументи, презаписване - демо

// демонстрация

Page 31: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Често използвани методи – символни низове• Проверка дали един низ е нулев, празен или съставен

само от интервали• Форматиране на низ• Подравняване и подкастряне на низ• Взимане на дължината на низ• Извличане на подниз• Търсене и замяна на символ и подниз в низ• Проверка за начало и край на низ• Съединяване на масив от низове в низ• Разделяне на низ на масив от низове• Превръщане между малки и големи букви

Page 32: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Често използвани методи – превръщане на данни• Превръщане на стойност в низ – ToString• Превръщане на низ в стойност от числов тип – Parse• Превръщане на стойност в основен тип данни – Convert

Page 33: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Често използвани методи – работа с файлове• Четене и запис на файл като масив от байтове• Четене и запис на файл като текст• Четене и запис на файл като множество от редове

Page 34: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Често използвани методи – работа с масиви• Клониране на масив• Копиране на масив• Сортиране на масив• Изчистване на масив• Търсене в масив• Взимане на размерностите на масив• Обръщане на масив

Page 35: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Често използвани методи – работа с конзола• Изчистване на екрана• Издаване на звук• Изчитане и печат на текст• Установяване на големина на прозореца• Установяване на позиция на курсора• Допълнителни възможности:– Проверка за натиснати (специални) клавиши– Позиция на курсора– Цвят на шрифта и фона– Големина и позиция на прозореца– Заглавие на прозореца

Page 36: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Често използвани методи – други методи• Генериране на произволни числа– генериране на число– изпълнение на събития с вероятностен характер

• Изчакване на определен интервал от време

Page 37: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Често използвани методи// демонстрация

Page 38: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Задачи за упражнение – Златотърсачи• Създайте метод GetFieldBounds, в който потребителят

въвежда две цели числа x ∈ (10; maxX) и y ∈ (10; maxY), maxX и maxY се подават в параметър. Потребителят да може да откаже въвеждането с въвеждане на празен низ, а методът връща информация дали потребителят е отказал въвеждане или не, както и въведените числа (ако са въведени такива).

Page 39: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Задачи за упражнение – Златотърсачи• Създайте метод CreateField, който създава и връща

двумерен масив с размери m и n, елементите на който запълнете с произволни стойности от изброим списък с елементи:– „OurGuy“ – точно един на произволно място в полето;– „SomeGuy“ – брой съответстващ на 5% от местата в полето на

произволни места в полето;– „Diamond” – брой съответстващ на 10% от местата в полето на

произволни места в полето (броят им се връща от метода);– „Ground“ – произволно попълнен с вероятност 40%;– „Grass“ – произволно попълнен с вероятност 30%;– „Tree“ – произволно попълнен с вероятност 20%;– „Stone“ – произволно попълнен с вероятност 10%.

Page 40: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Задачи за упражнение – Златотърсачи• Създайте метод DrawField, който „рисува“ на екрана

съдържанието на масива от предишната задача. За всеки елемент от масива поставя съответния оцветен символ:– „OurGuy“ – символ „☺“ (U+263A) oцветен в цвят по избор;– „SomeGuy“ – символ „☻” (U+263B) оцветен в цвят по избор;– „Diamond” – символ „♦“ (U+2666) оцветен в светло сиво;– „Ground“ – символ „▒“ (U+2592) оцветен в светло кафяво;– „Grass“ – символ „▓“ (U+2593) оцветен в светло зелено;– „Tree“ – символ „♣“ (U+2663) оцветен в тъмно зелено;– „Stone“ – символ „٥“ (U+0665) оцветен в тъмно сиво.

Page 41: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Задачи за упражнение – Златотърсачи• Направете метод MoveGuy, който приема като

параметър „поле“, двойка координатите и посока (стойност от изброим списък “Up”, “Down”, “Left” или “Right”), и мести „guy” намиращ се на съответните координати в съответната посока, само като там има „ground”, „grass” или „diamond”. След себе си „guy“ оставя „ground”.

• Направете метод MoveSomeGuys, който приема като параметър „поле“ и премества всички „some guys“ в произволна посока.

• Направете метод MoveOurGuy, който приема като параметър „поле“ и посока, и мести „our guy” в определената посока.

Page 42: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Задачи за упражнение – Златотърсачи• Направете метод ProcessInput, който приема като

параметър „полето“ и проверява дали потребителят е натиснал клавиш:– Ако е натиснал стрелка, методът връща стойност

съответстваща на посоката на стрелката в референтен параметър

– Ако е натиснал Escape, методът връща информация за това в изходен параметър

– Методът връща информация дали потребителят е натиснал клавиш или не

Page 43: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Задачи за упражнение – Златотърсачи• Направете програма съдържаща всички изработени по-

горе методи, като основната програма трябва да:1. изчисти екрана2. подкани потребителя да въведе размер на полето не по-голям

от този на екрана (ако потребителят не въведе такъв, програмата трябва да прекрати работа)

3. създаде „поле“ с въведените от потребителя размери4. до натискане на „Escape” или свършване на „диамантите“:

1. рисува „полето“2. премества всички „other guys”3. обработва входа от потребителя и, ако е нужно, премества “our guy”4. изчаква 100 ms

5. извежда събрания от потребителя процент „диаманти“

Page 44: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Въпроси?

Page 45: Курс по програмиране на C#

Copyright © 2013 DAVID Holding Company

Благодаря!• Валери Дачев– [email protected]– @vdachev– https://facebook.com/vdachev

• ДАВИД академия– [email protected]– http://acad.david.bg/– @david_academy– https://facebook.com/DavidAcademy