Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

Училищен курс по програмиране на C# (2013/2014), занятие №4

Ad

YouTube-Videos werden auf SlideShare nicht mehr unterstützt.

Original auf YouTube ansehen

Ad

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

2013

Ad

Съдържание 1/2
• Функции и методи
–
–
–
–
–

Контрол на изпълнението
Видимост на променливите
Методи без връщана стойност
...

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Hier ansehen

1 von 47 Anzeige
1 von 47 Anzeige

Училищен курс по програмиране на C# (2013/2014), занятие №4

Herunterladen, um offline zu lesen

Училищен курс по програмиране на C# (2013/2014)
Занятие №4: Функции и методи. Често използвани методи

Училищен курс по програмиране на C# (2013/2014)
Занятие №4: Функции и методи. Често използвани методи

Weitere Verwandte Inhalte

Diashows für Sie

Училищен курс по програмиране на C# (2013/2014), занятие №4

  1. 1. Курс по програмиране на C# Занятие №4 Функции и методи. Често използвани методи 2013
  2. 2. Съдържание 1/2 • Функции и методи – – – – – Контрол на изпълнението Видимост на променливите Методи без връщана стойност Методи с връщана стойност Ограничения • Параметри – Референтни параметри – Изходящи параметри – Масиви от параметри
  3. 3. Съдържание 2/2 • Аргументи – Незадължителни аргументи – Именувани аргументи • Презаписване на методи • Често използвани методи – – – – – – Символни низове Превръщане на данни Работа с файлове Работа с масиви Работа с конзола Други методи
  4. 4. Функции и методи • Какво е „функция“? Какво е „метод“? – Функция е подпрограма, която извършва конкретна дейност и може да бъде извиквана от друга част от програмата – Функциите могат да приемат един или повече параметри – Функциите могат да връщат единична стойност като резултат – Аргумент е стойността подавана на даден параметър – Метод е функция дефинирана в рамките на клас или структура – Процедури наричаме функции, които не връщат резултат – В езика C# методът е единственият начин за дефиниране на функции
  5. 5. Функции и методи • Приложение на функциите – – – – Разбиване на приложението на по-конкретни задачи Преизползване на програмния код Разделяне на отговорностите и по-добра поддръжка Подобрена разбираемост на кода • BCL представлява библиотека от методи подпомагащи разработчика в създаването на приложения без това да става от нулата
  6. 6. Функции и методи • Характеристики на методите – – – – Наименование Брой и тип на параметрите Връщана стойност Клас, в който методът е дефиниран • Сигнатура на метод – Наименование – Ред, вид и тип на параметрите • Наименованието на метода трябва да отразява неговото предназначение • В един и същи клас не може да има повече от един метод с една и съща сигнатура
  7. 7. Функции и методи • Деклариране на методи – Тип на данните на връщаната стойност (или “void” ако няма такава) – Наименование – Описание на параметрите – Тяло на метода // метод без параметри и резултат void Run() { // prison break } // метод с параметър без резултат void Notify(string message) { // изпраща уведомления по e-mail } // метод с два параметъра и резултат int Sum(int a, int b) { int c = a + b; return c; }
  8. 8. Функции и методи • Използване на методи – Наименование на клас или обект, ако методът е деклариран в друг клас – Наименованието на метода – Списък от аргументи // извикване на метод без параметър // (след атомна бомба - нищо) DropNuclearBomb(); // извикване на метод с параметър // (или „да изчезнеш за 60 секунди“) SetBombTimer(60); // извикване на метод с няколко // параметъра PlantBomb(here, “Ahmet”); // използване на резултат int sum = Sum(a, b); // префиксиране с наименование на клас Console.WriteLine(“Kaboom!”);
  9. 9. Контрол на изпълнението • Изпълнението на метод започва при неговото извикване • Изпълнението на метод приключва: – при достигане на края му – при достигане на ключовата дума „return” – при възникване на грешка • След изпълнение на метод, изпълнението продължава от мястото, на което е бил извикан
  10. 10. Видимост на променливите • Локални променливи за един метод са тези декларирани в неговото тяло • В тялото на един метод не могат да бъдат декларирани повече от една променливи с едно и също наименование • Локалните променливи не могат да бъдат достъпвани извън метода • Параметрите имат статут на локални променливи void GimmeFive() { // локална променлива “five” int five = 5; // използване на локална променлива Console.WriteLine(“Hi {0}!”, five); // къде отиваш ти, може би?! string five = “Five”; } Console.WriteLine(five); // Ко?! Не!
  11. 11. Методи без връщана стойност • Когато методът не връща резултат, изпълнението приключва: – при достигане на края му – при достигане на ключовата дума “return” – при възникване на грешка void DoSomethingNerd(WeatherInfo info) { // ако времето не е хубаво… if (!IsWeatherFine(info)) return; // да порешаваме задачи! SolveSomeMathsProblems(); }
  12. 12. Методи с връщана стойност • Когато методът връща резултат, изпълнението приключва: – при използване на ключовата дума „return” следвана от израз – при възникване на грешка • След ключовата дума „return” задължително трябва да има израз, който връща стойност от същия тип, като резултата от метода 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; }
  13. 13. Методи връщащи стойност • Извиквания към методи връщащи стойност могат да бъдат използвани в изрази – В изрази извикването на метода се заменя със стойността на върнатия от него резултат // имаме триъгълник със страни… 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);
  14. 14. Параметри • Параметър от стойностен тип – Параметърът взима стойността от съответния аргумент – При изпълнение на метода, стойността на аргумента се запазва // параметър от стойностен тип void CountBackwards(int n) { for (; n > 0; n--) Console.WriteLine(n); } // променлива от стойностен тип int n = 100; // използване на стойностен аргумент CountBackwards(n); // какво ще изпише тук? Console.WriteLine(n);
  15. 15. Параметри • Параметър от референтен тип – Параметърът взима референцията от съответния аргумент – При изпълнение на метода, референциите на аргумента се запазват, но не винаги и съхранените зад тях данни // масивите са от референтен тип int[] arr = new [] { 1, 3, 2, 10, 0 }; // извикваме метод за сортиране Array.Sort(arr); // след извикването, масивът си е // останал на същото място в паметта, // но пък сортиран
  16. 16. Параметри • Параметър от референтен тип – Да си припомним Иванчо! • Но по-подробно с Иванчо и други (референтни) типове ще се запознаем по-късно в курса // правим си „референтно“ хлапе Иванчо Person kid = new Person(“Иванчо”); // Иванчо е слушал и отива да си играе Play(kid);// Иванчо скача на въже… // … и чупи два шийни прешлена // Но, въпреки това, той е същият // Иванчо, който е отишъл да си играе… ShowCervicalVertebrae(kid); // … просто явно е останал с пет // функциониращи шийни прешлена
  17. 17. Функции и методи - демо // демонстрация
  18. 18. Ограничения • Методите могат да връщат само една стойност • Ако искаме да върнем повече?! – – – – – масиви структури обекти референтни параметри изходящи параметри // методът ни връща масив string[] GetCourseInfo() { return new[] { // наименование на курса “Курс по програмиране на C#”, // наименование на организацията “ДАВИД академия”, }; } string[] info = GetCourseInfo(); Console.WriteLine( “Курс: {0}; Организация: {1}”, info[0], info[1]); // … и сега добавете годината! 
  19. 19. Референтни параметри • Позволяват предаването на аргументите по референция, а не по стойност • Възможност за промяна на аргумента в извиквания метод • Възможност за връщане на повече от една стойност чрез използване на няколко аргумента • Декларират се с поставяне на ключовата дума „ref” пред дефиницията на параметъра // деклариране void GetCourseInfo(ref string course, ref string organisation, ref int year) { course = “Програмиране на C#”; organisation = “ДАВИД академия”; }
  20. 20. Референтни параметри • Използват се с поставяне на ключовата дума „ref” пред аргумента • Аргументът трябва да е предварително декларирана променлива от същия тип • Аргументът трябва да има предварително присвоена стойност • Извикването не гарантира, че в метода ще се присвои стойност на аргумента // деклариране 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);
  21. 21. Изходни параметри • Позволяват връщането на стойност в подаден (изходен) параметър • Задължителна промяна на аргумента в извиквания метод • Възможност за връщане на повече от една стойност чрез използване на няколко аргумента • Декларират се с поставяне на ключовата дума „out” пред дефиницията на параметъра // деклариране void GetCourseInfo(out string course, out string organisation, out int year) { course = “Програмиране на C#”; organisation = “ДАВИД академия”; year = 2013; }
  22. 22. Изходни параметри • Използват се с поставяне на ключовата дума „out” пред аргумента • Аргументът трябва да е предварително декларирана променлива от същия тип • Не е нужно аргументът да има предварително присвоена стойност • Извикването гарантира, че в метода ще се присвои стойност на аргумента // деклариране 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);
  23. 23. Масиви от параметри • Не винаги е известно с колко параметъра ще бъде извикан даден метод • Например string.Format! • Какво да правим?! string message; // извикване с два аргумента message = string.Format( “Курс {0}”, courseName); // извикване с три аргумента message = string.Format( “Курс {0} на {1}”, courseName, organisationName); // извикване с четири аргумента message = string.Format( “Курс {0} ({2}) на {1}”, courseName, organisationName, year); // де факто могат да бъдат произволен брой
  24. 24. Масиви от параметри • Произволен брой параметри на метод указваме с масив от параметри • Декларират се с поставяне на ключовата дума „params” пред дефиницията на първия параметъра • Този параметър трябва да е едномерен масив от типа параметри, които очакваме • В тялото на метода работим с параметрите като с масив // деклариране 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]); } }
  25. 25. Масиви от параметри • След масив от параметри не може да има други параметри • Дефиницията на един метод може да декларира само един масив от параметри // деклариране 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]); } }
  26. 26. Масиви от параметри • Извикването става с подаване на 0 или повече параметъра от типа на елементите в декларирания аргумент • Като параметър можем да подадем и обикновен масив // деклариране 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”));
  27. 27. Незадължителни аргументи • Незадължителни аргументи – Деклариране: на параметъра се задава стойност по подразбиране – Използване: за стойност на пропуснатите аргументи се използва стойността по подразбиране на съответния параметър // деклариране на метод с // незадължителни аргументи void SendEmail( string text, string subject = null, string from = null) { // … } // използване на метод с // незадължителен аргумент SendEmail(“Hi, there!”);
  28. 28. Именувани аргументи • Именувани аргументи • // деклариране на метод с // незадължителни аргументи – Използване: споменава се 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); – След именувани аргументи не могат да се използват позиционни аргументи
  29. 29. Презаписване на методи • Презаписването на методи е възможността в една област да бъдат декларирани повече от един метод с едно и също наименование, но различна сигнатура • Какво е сигнатура на метод?! – Включва наименованието му, типа и вида на параметрите и техния ред – Не включва връщания тип данни и ключовата дума “params” void F(); // void F(int x); // void F(ref int x); // void F(int x, int y); // int F(string s); // int F(int x); // void F(string[] a); // void F(params string[] a); // F() F(int) F(ref int) F(int, int) F(string) F(int) F(string[]) F(string[]) // ЗАБЕЛЕЖКА: сигнатурите не могат да се // различават само по думите „ref” и “out” void F(out int x); // F(out int)
  30. 30. Методи, параметри, аргументи, презаписване - демо // демонстрация
  31. 31. Често използвани методи – символни низове • Проверка дали един низ е нулев, празен или съставен само от интервали • Форматиране на низ • Подравняване и подкастряне на низ • Взимане на дължината на низ • Извличане на подниз • Търсене и замяна на символ и подниз в низ • Проверка за начало и край на низ • Съединяване на масив от низове в низ • Разделяне на низ на масив от низове • Превръщане между малки и големи букви
  32. 32. Често използвани методи – превръщане на данни • Превръщане на стойност в низ – ToString • Превръщане на низ в стойност от числов тип – Parse • Превръщане на стойност в основен тип данни – Convert
  33. 33. Често използвани методи – работа с файлове • Четене и запис на файл като масив от байтове • Четене и запис на файл като текст • Четене и запис на файл като множество от редове
  34. 34. Често използвани методи – работа с масиви • • • • • • • Клониране на масив Копиране на масив Сортиране на масив Изчистване на масив Търсене в масив Взимане на размерностите на масив Обръщане на масив
  35. 35. Често използвани методи – работа с конзола • • • • • • Изчистване на екрана Издаване на звук Изчитане и печат на текст Установяване на големина на прозореца Установяване на позиция на курсора Допълнителни възможности: – – – – – Проверка за натиснати (специални) клавиши Позиция на курсора Цвят на шрифта и фона Големина и позиция на прозореца Заглавие на прозореца
  36. 36. Често използвани методи – други методи • Генериране на произволни числа – генериране на число – изпълнение на събития с вероятностен характер • Изчакване на определен интервал от време
  37. 37. Често използвани методи // демонстрация
  38. 38. Задачи за упражнение – Златотърсачи • Създайте метод GetFieldBounds, в който потребителят въвежда две цели числа x ∈ (10; maxX) и y ∈ (10; maxY), maxX и maxY се подават в параметър. Потребителят да може да откаже въвеждането с въвеждане на празен низ, а методът връща информация дали потребителят е отказал въвеждане или не, както и въведените числа (ако са въведени такива).
  39. 39. Задачи за упражнение – Златотърсачи • Създайте метод CreateField, който създава и връща двумерен масив с размери m и n, елементите на който запълнете с произволни стойности от изброим списък с елементи: – „OurGuy“ – точно един на произволно място в полето; – „SomeGuy“ – брой съответстващ на 5% от местата в полето на произволни места в полето; – „Diamond” – брой съответстващ на 10% от местата в полето на произволни места в полето (броят им се връща от метода); – „Ground“ – произволно попълнен с вероятност 40%; – „Grass“ – произволно попълнен с вероятност 30%; – „Tree“ – произволно попълнен с вероятност 20%; – „Stone“ – произволно попълнен с вероятност 10%.
  40. 40. Задачи за упражнение – Златотърсачи • Създайте метод DrawField, който „рисува“ на екрана съдържанието на масива от предишната задача. За всеки елемент от масива поставя съответния оцветен символ: – – – – – – – „OurGuy“ – символ „☺“ (U+263A) oцветен в цвят по избор; „SomeGuy“ – символ „☻” (U+263B) оцветен в цвят по избор; „Diamond” – символ „♦“ (U+2666) оцветен в светло сиво; „Ground“ – символ „▒“ (U+2592) оцветен в светло кафяво; „Grass“ – символ „▓“ (U+2593) оцветен в светло зелено; „Tree“ – символ „♣“ (U+2663) оцветен в тъмно зелено; „Stone“ – символ „ “ (U+0665) оцветен в тъмно сиво.
  41. 41. Задачи за упражнение – Златотърсачи • Направете метод MoveGuy, който приема като параметър „поле“, двойка координатите и посока (стойност от изброим списък “Up”, “Down”, “Left” или “Right”), и мести „guy” намиращ се на съответните координати в съответната посока, само като там има „ground”, „grass” или „diamond”. След себе си „guy“ оставя „ground”. • Направете метод MoveSomeGuys, който приема като параметър „поле“ и премества всички „some guys“ в произволна посока. • Направете метод MoveOurGuy, който приема като параметър „поле“ и посока, и мести „our guy” в определената посока.
  42. 42. Задачи за упражнение – Златотърсачи • Направете метод ProcessInput, който приема като параметър „полето“ и проверява дали потребителят е натиснал клавиш: – Ако е натиснал стрелка, методът връща стойност съответстваща на посоката на стрелката в референтен параметър – Ако е натиснал Escape, методът връща информация за това в изходен параметър – Методът връща информация дали потребителят е натиснал клавиш или не
  43. 43. Задачи за упражнение – Златотърсачи • Направете програма съдържаща всички изработени погоре методи, като основната програма трябва да: 1. изчисти екрана 2. подкани потребителя да въведе размер на полето не по-голям от този на екрана (ако потребителят не въведе такъв, програмата трябва да прекрати работа) 3. създаде „поле“ с въведените от потребителя размери 4. до натискане на „Escape” или свършване на „диамантите“: 1. 2. 3. 4. рисува „полето“ премества всички „other guys” обработва входа от потребителя и, ако е нужно, премества “our guy” изчаква 100 ms 5. извежда събрания от потребителя процент „диаманти“
  44. 44. Въпроси?
  45. 45. Благодаря! • Валери Дачев – valery@david.bg – @vdachev – https://facebook.com/vdachev • ДАВИД академия – – – – acad@david.bg http://acad.david.bg/ @david_academy https://facebook.com/DavidAcademy

×