1 A + B Операнд 1Операнд 2 Оператор Что такое выражение (expression) ? Что такое инструкция (statement) ? Операторы int max = (a > b) ? a : b;
2 Присваивания: = Математические (+, %, >>, …) Логические (==, !=, >=, …) Вызов метода: () Индексация: [] Условный: if, switch Цикла: for, while, do-while, foreach Перехода: goto, break, continue, return Операторы
Условные операторы int x = 1; … if (x) // error { …. } 3 int k = Int32.Parse(Console.ReadLine()); if (k % 2 == 0) { Console.WriteLine("Четное число"); } else { Console.WriteLine("Нечетное число"); } Console.ReadLine();
4 int x = 0; if (x = 1) { } // Что произойдет? string str = "_Текст"; if (str.Length > 0 && str[0] == '_') { }
Switch: Целые string enum char bool 5 int k = Int32.Parse(Console.ReadLine()); switch (k) { case 1: case 2: Console.WriteLine("Неудовлетворительно"); break; case 3: Console.WriteLine("Удовлетворительно"); break; case 4: Console.WriteLine("Хорошо"); break; case 5: Console.WriteLine("Отлично"); break; default: Console.WriteLine("Ошибка"); break; }
6 string str = null;... string result = (str != null ? str : "пусто"); или string result = str ?? "пусто"; int max = (a > b ? a : b); Тернерный оператор Сокращенная форма для проверки на null:
for uint sum = 0; for (int n=1; n
foreach string[] drives = Environment.GetLogicalDrives(); foreach (string s in drives) { Console.WriteLine(s); } int[] array = new int[] { 1, 1, 2, 3, 5, 8, 13 }; int sum = 0; foreach (var val in array) { sum += val; }
9 while Random rnd = new Random(); while (true) { int r = rnd.Next(1, 10); Console.WriteLine(r); if (r == 7) break; } while (reader.Read()) {... }
do-while 10 string password = "qwerty"; do { Console.Write("Введите пароль: "); string buf = Console.ReadLine(); } while (buf != password);
11 Оператор () int[] monthsLengths = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int month = 2; int year = 2012; int daysCount = monthsLengths[month] + (month == 2 && year % 4 == 0) ? 1 : 0;
12 A = B = C = D // ? A – B – C * D + F * G + H // ? Ассоциативность операторов int a, b, c; c = 1; // The following two lines are equivalent. a = b = c; a = (b = c); // The following line, which forces left // associativity, causes an error. //(a = b) = c;
13 string text = "Это текст"; if (text.Length == 0) Console.WriteLine("Пусто"); else { string[] words = text.Split(' '); foreach (var word in words) { Console.WriteLine(word); } Какая форма записи более понятна? string text = "Это текст"; if (text.Length == 0) { Console.WriteLine("Пусто"); } else { string[] words = text.Split(' '); foreach (var word in words) { Console.WriteLine(word); }
14 for (int n = 0; ; n++) { if (Console.ReadKey().Key == ConsoleKey.Escape) break; } Console.WriteLine("Вы ввели: {0} символов", n); // Ошибка! int n = 0; for (; ; n++) { if (Console.ReadKey().Key == ConsoleKey.Escape) break; } Console.WriteLine("Вы ввели: {0} символов", n);
Функции с переменным числом аргументов private static int Sum(int a, int b) { return a + b; } static void Main() { int sum = Sum(1, 2); } 15 Функции
int Sum(params int [] array) { int sum = 0; foreach (int n in array) { sum += n; } return sum; } int s1 = Sum(1, 2, 3); int s2 = Sum(1, 2, 3, 4, 5); 16 -возможно любое количество параметров -нет ограничений на тип параметров -params должен быть последним в списке аргументов, и в единственном экземпляре
int Min (int a, int b) { return (a < b ? a : b); } string Min (string a, string b) { return (a.Length < b.Length ? a : b); } float Min (float[] p) { … } Перегрузка функций (functions overload) 17 Min (1, 5); Min ("abc", "ab") Min (new float[]{0.1f, 0.2f, 0.3f});
18 bool IsLeapYear(DateTime dateTime) { return IsLeapYear(dateTime.Year); } bool IsLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0); }
Перегрузка функций, содержащих params void func (params int [] p); void func (int x, int y); void func (int x, params int [] p); void func (int x, int y); func(3, 5); func(10, 20, 30); func(1, 2); 19
При выборе варианта функции, у использования params меньший приоритет: void func (params int [] p); void func (int x, int y); void func (int x, params int [] p); void func (int x, int y); func(3, 5); func(10, 20, 30); func(1, 2); Но еще меньший приоритет у приведения типа : void func(params int[] p); void func(uint x, uint y); func(1, 2); 20
21 Передача value-type аргументов в функцию long x = 5; long y = x; y = 1; x - ? private static void SetZero(float val) { val = 0f; } static void Main() { float f = 10f; SetZero(f); // f - ? }
22 Передача ref-type аргументов в функцию int[] arrayA = { 1, 2, 3 }; int[] arrayB = arrayA; arrayB[0] = 5; foreach (int i in arrayA) Console.WriteLine(i); private static void SetZero(float[] val) { for (int i = 0; i < val.Length; i++) val[i] = 0f; } static void Main() { float[] array = { 1f, 2f, 3f }; SetZero(array); foreach (int i in array) Console.WriteLine(i); }
Модификатор ref -позволяет передавать в функцию значение по ссылке 23 private static void Swap (ref int a, ref int b) { int tmp = a; a = b; b = tmp; } int x = 1, y = 2; Swap(ref x, ref y);
24 Передаче по ссылке параметра reference-type private static void SetZero(int[] p) { p[0] = 10; p = new int[] { 1, 2, 3 }; }... int[] array = new int[5]; SetZero(array); foreach (int i in array) { Console.Write("{0} ", i); }
25 private static void SetZero(ref int[] p) { p[0] = 10; p = new int[] { 1, 2, 3 }; }... int[] array = new int[5]; SetZero(ref array); foreach (int i in array) { Console.Write("{0} ", i); }
Модификатор out -предназначен для получения значений из метода (по ссылке) 26 void MinMax(int a, int b, out int min, out int max) { min = (a < b) ? a : b; max = (a > b) ? a : b; } int minValue; int maxValue; MinMax(100, 10, out minValue, out maxValue);
27 Значения параметров функций по умолчанию public void Show(string text, string caption, bool sound) { //... }... Show("Привет!", "", false);
28 void Show(string text, string caption = "", bool sound = false) { //... }... Show("Привет!"); Show("Привет!", "Сообщение"); Show("Привет!", "Сообщение", true);
29 Именованные параметры class Circle { public void Set(int x, int y, int r) { } Circle circle = new Circle(); circle.Set(x: 0, y: 0, r: 10); // circle.Set(x: 0, r: 10, y: 0);
30 class Circle { public void Set(int x=0, int y=0, int r=1) { } Circle circle = new Circle(); circle.Set(y: 0);