From 4291a2ce4c8729467b09f4170c4b8bf8ea34ab39 Mon Sep 17 00:00:00 2001 From: Nikolay Gagarinov Date: Tue, 20 Oct 2026 18:26:11 +0500 Subject: [PATCH] =?UTF-8?q?fix(theory):=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=82=D1=8C=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B8=20=D0=BF=D1=83=D0=BD=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8E=20=D0=B2=20=D1=83=D1=80=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=D1=85=20C#?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Находки LanguageTool (bin/spellcheck.ts): пропущенные запятые, «тоже самое», «в отличии от», «может понадобится», «по соображением», «три и более параметров», лишняя кавычка в уроке про тесты. Co-Authored-By: Claude Opus 5.5 (1M context) --- modules/10-basics/10-hello-world/ru/README.md | 2 +- modules/10-basics/30-statemets/ru/README.md | 2 +- modules/10-basics/40-testing/ru/README.md | 4 ++-- modules/30-strings/10-quotes/ru/README.md | 2 +- modules/30-strings/30-concatenation/ru/README.md | 2 +- modules/40-variables/10-definition/ru/README.md | 2 +- modules/40-variables/30-variables-naming/ru/README.md | 2 +- modules/40-variables/50-variables-expressions/ru/README.md | 2 +- modules/40-variables/90-interpolation/ru/README.md | 2 +- modules/50-data-types/10-data-types-basics/ru/README.md | 2 +- modules/50-data-types/30-data-types-list/ru/README.md | 4 ++-- modules/50-data-types/40-null/ru/README.md | 2 +- modules/60-methods-using/10-methods/ru/README.md | 2 +- modules/60-methods-using/20-methods-parameters/ru/README.md | 2 +- modules/60-methods-using/25-properties/ru/README.md | 2 +- .../60-methods-using/30-methods-as-expressions/ru/README.md | 2 +- .../60-methods-using/40-string-immutability/ru/README.md | 2 +- modules/60-methods-using/50-methods-chain/ru/README.md | 2 +- modules/60-methods-using/90-methods-variants/ru/README.md | 6 +++--- .../10-method-definition-static/ru/README.md | 4 ++-- .../20-method-definition-return/ru/README.md | 2 +- .../30-method-definition-parameters/ru/README.md | 2 +- .../40-method-definition-default-parameters/ru/README.md | 2 +- modules/80-logic/20-predicates/ru/README.md | 2 +- modules/80-logic/50-logical-negation/ru/EXERCISE.md | 4 ++-- modules/90-conditionals/10-if/ru/README.md | 2 +- modules/90-conditionals/20-if-else/ru/README.md | 2 +- modules/95-loops/15-aggregation-numbers/ru/README.md | 4 ++-- 28 files changed, 35 insertions(+), 35 deletions(-) diff --git a/modules/10-basics/10-hello-world/ru/README.md b/modules/10-basics/10-hello-world/ru/README.md index e64abaa..55b6f70 100644 --- a/modules/10-basics/10-hello-world/ru/README.md +++ b/modules/10-basics/10-hello-world/ru/README.md @@ -1,6 +1,6 @@ C# — это язык программирования, созданный компанией Microsoft. Это один из самых популярных языков программирования в России и в мире — достаточно глянуть на число открытых вакансий (а еще на предлагаемые зарплаты). C# — кроссплатформенный язык. Это означает что на нем можно писать веб-сервисы, настольные приложения, мобильные приложения, приложения для интернета вещей (IoT), игры и еще многое другое. -Microsoft для своего языка создало удобную среду для разработки (IDE) — Visual Studio. Для того чтобы начать разрабатывать не нужно устанавливать десятки SDK, настраивать текстовые редакторы и т.д. Visual Studio включает в себя все нужные инструменты. Достаточно его установить и уже можно с удобством разрабатывать все что угодно. +Microsoft для своего языка создало удобную среду для разработки (IDE) — Visual Studio. Для того чтобы начать разрабатывать, не нужно устанавливать десятки SDK, настраивать текстовые редакторы и т.д. Visual Studio включает в себя все нужные инструменты. Достаточно его установить, и уже можно с удобством разрабатывать всё что угодно. C# входит в семейство C-подобных языков. Туда же входят некоторые другие языки: C++, Java, JavaScript, PHP. Даже если C# не понравится как первый язык, то перейти на другой будет не сложно. diff --git a/modules/10-basics/30-statemets/ru/README.md b/modules/10-basics/30-statemets/ru/README.md index 0099f83..24208bd 100644 --- a/modules/10-basics/30-statemets/ru/README.md +++ b/modules/10-basics/30-statemets/ru/README.md @@ -13,7 +13,7 @@ Mother of Dragons Dracarys! ``` -Почему это важно знать? Инструкция — это единица исполнения. Программа которая запускает код на C#, выполняет инструкции строго по очереди. И мы, как разработчики, должны понимать этот порядок и уметь мысленно разделять программу на независимые части, удобные для анализа. +Почему это важно знать? Инструкция — это единица исполнения. Программа, которая запускает код на C#, выполняет инструкции строго по очереди. И мы, как разработчики, должны понимать этот порядок и уметь мысленно разделять программу на независимые части, удобные для анализа. Теоретически инструкции можно написать последовательно друг за другом без переноса на новую строчку: diff --git a/modules/10-basics/40-testing/ru/README.md b/modules/10-basics/40-testing/ru/README.md index 0f466f4..d67efb5 100644 --- a/modules/10-basics/40-testing/ru/README.md +++ b/modules/10-basics/40-testing/ru/README.md @@ -6,7 +6,7 @@ Например, если ваша задача — написать код для сложения двух чисел, то проверочная система будет передавать ему разные комбинации чисел и сверять ответ вашего кода с реальными суммами. Если во всех случаях ответы совпадут, то решение считается верным. -Вот простой пример: помните задание из 1го упражнения, где вам надо было вывести на экран "Hello, World!"?. Допустим, вы допустили небольшую опечатку. Система ответит примерно так: +Вот простой пример: помните задание из первого упражнения, где вам надо было вывести на экран "Hello, World!"? Допустим, вы допустили небольшую опечатку. Система ответит примерно так: ```text Submission#0.output == "Hello, World!" @@ -16,7 +16,7 @@ Submission#0.output == "Hello, World!" "Hello World!" ``` -Читать это следует так: в ответе ожидалось строка с "Hello, World!" (первая строчка после двойного '='), но в вместо него пришла строка "Hello World!" (нижняя строчка)". Строки отличаются символом под номером 5. В данном примере пропущена запятая. +Читать это следует так: в ответе ожидалась строка с "Hello, World!" (первая строчка после двойного '='), но вместо неё пришла строка "Hello World!" (нижняя строчка). Строки отличаются символом под номером 5. В данном примере пропущена запятая. Кроме наших тестов, будет крайне полезно экспериментировать с кодом в вашем собственном консольном приложении. [Установите Visual Studio](https://visualstudio.microsoft.com/ru/downloads/) и попробуйте создать [простое консольное приложение](https://docs.microsoft.com/ru-ru/visualstudio/get-started/csharp/tutorial-console?view=vs-2022). Оцените мощь IDE, которая может сама автодополнять выражения и подчеркивать места с ошибками. diff --git a/modules/30-strings/10-quotes/ru/README.md b/modules/30-strings/10-quotes/ru/README.md index 25b62c3..28babf3 100644 --- a/modules/30-strings/10-quotes/ru/README.md +++ b/modules/30-strings/10-quotes/ru/README.md @@ -32,7 +32,7 @@ Dragon's mother said "No" Console.WriteLine("Dragon's mother said "No""); ``` -С точки зрения C#, здесь странная конструкция состоящая из строк _"Dragon's mother said "_ и _""_ и _No_ между ними без пробелов. Причем последнее не рассматривается как строка, оно не в кавычках. Значит прямым способом эту строчку не вывести. +С точки зрения C#, здесь странная конструкция, состоящая из строк _"Dragon's mother said "_ и _""_ и _No_ между ними без пробелов. Причем последнее не рассматривается как строка, оно не в кавычках. Значит прямым способом эту строчку не вывести. Для вывода таких строк используют **символ экранирования**: `\`. Если поставить `\` перед кавычкой, это будет означать, что кавычку нужно рассматривать не как начало или конец строки, а как часть строки. diff --git a/modules/30-strings/30-concatenation/ru/README.md b/modules/30-strings/30-concatenation/ru/README.md index bfc2bbe..757c2bf 100644 --- a/modules/30-strings/30-concatenation/ru/README.md +++ b/modules/30-strings/30-concatenation/ru/README.md @@ -1,5 +1,5 @@ -Программы, которые создают разработчики постоянно оперируют строками. Всё, что мы видим на сайтах, в мобильных приложениях, так или иначе представлено в виде текста. Этот текст чаще всего динамический, то есть полученный из разных частей, которые соединяются вместе. Операция соединения строк в программировании называется **конкатенацией**. +Программы, которые создают разработчики, постоянно оперируют строками. Всё, что мы видим на сайтах, в мобильных приложениях, так или иначе представлено в виде текста. Этот текст чаще всего динамический, то есть полученный из разных частей, которые соединяются вместе. Операция соединения строк в программировании называется **конкатенацией**. ```cs // Оператор такой же, как и при сложении чисел diff --git a/modules/40-variables/10-definition/ru/README.md b/modules/40-variables/10-definition/ru/README.md index 441bd7d..f5ff5f7 100644 --- a/modules/40-variables/10-definition/ru/README.md +++ b/modules/40-variables/10-definition/ru/README.md @@ -6,7 +6,7 @@ Console.WriteLine("Father!"); // => Father! Console.WriteLine("Father!"); // => Father! ``` -В простейшем случае так и стоит поступить, но если фраза _Father!_ начнет использоваться чаще, да еще и в разных частях программы, то придется ее везде повторять. Проблемы с таким подходом начнутся тогда, когда понадобится изменить нашу фразу, а такое происходит довольно часто. Нам придется найти все места где использовалось фраза _Father!_ и выполнить необходимую замену. А можно поступить по другому. Вместо копирования нашего выражения, достаточно создать переменную с этой фразой. +В простейшем случае так и стоит поступить, но если фраза _Father!_ начнет использоваться чаще, да еще и в разных частях программы, то придется ее везде повторять. Проблемы с таким подходом начнутся тогда, когда понадобится изменить нашу фразу, а такое происходит довольно часто. Нам придется найти все места, где использовалась фраза _Father!_ и выполнить необходимую замену. А можно поступить по-другому. Вместо копирования нашего выражения достаточно создать переменную с этой фразой. ```cs // greeting – переводится как приветствие diff --git a/modules/40-variables/30-variables-naming/ru/README.md b/modules/40-variables/30-variables-naming/ru/README.md index ac61779..f3b2420 100644 --- a/modules/40-variables/30-variables-naming/ru/README.md +++ b/modules/40-variables/30-variables-naming/ru/README.md @@ -7,7 +7,7 @@ Console.WriteLine(x); Console.WriteLine(x); ``` -Она по прежнему работает, но в ней изменилось имя переменной на `x`. Компьютеру без разницы, как мы называем переменные, это бездушная машина, но вот программистам — нет. Мы гораздо чаще читаем код, чем пишем. Причём не свой, а написанный другими людьми. От качества и понятности имён переменных зависит половина успеха в анализе кода. +Она по-прежнему работает, но в ней изменилось имя переменной на `x`. Компьютеру без разницы, как мы называем переменные, это бездушная машина, но вот программистам — нет. Мы гораздо чаще читаем код, чем пишем. Причём не свой, а написанный другими людьми. От качества и понятности имён переменных зависит половина успеха в анализе кода. Лучше посидеть и придумать название, которое описывает суть, смысл переменной, чем назвать её как попало, а в будущем переделывать. Постарайтесь давать им такие имена, чтобы они были максимально понятны без контекста, без изучения окружающего кода. diff --git a/modules/40-variables/50-variables-expressions/ru/README.md b/modules/40-variables/50-variables-expressions/ru/README.md index d80e459..872ef95 100644 --- a/modules/40-variables/50-variables-expressions/ru/README.md +++ b/modules/40-variables/50-variables-expressions/ru/README.md @@ -8,7 +8,7 @@ var dollarsCount = 50 * 1.25; Console.WriteLine(dollarsCount); ``` -В предыдущем уроке мы записывали в переменную конкретное значение. А здесь `var dollarsCount = 50 * 1.25;` справа от знака равно находится **выражение**. Программа вычислит результат — _62.5_ — и запишет его в переменную. С точки зрения программы не важно, что написано: _62.5_ или _50 * 1.25_, эти оба варианта — выражения, которые надо вычислить. И они вычисляются в одно и тоже значение — _62.5_. +В предыдущем уроке мы записывали в переменную конкретное значение. А здесь `var dollarsCount = 50 * 1.25;` справа от знака равно находится **выражение**. Программа вычислит результат — _62.5_ — и запишет его в переменную. С точки зрения программы не важно, что написано: _62.5_ или _50 * 1.25_, эти оба варианта — выражения, которые надо вычислить. И они вычисляются в одно и то же значение — _62.5_. Любая строка — выражение. Конкатенация строк — тоже выражение. Когда программа видит выражение, она вычисляет его и **возвращает** результат. Вот несколько примеров выражений, а в комментариях справа от каждого выражения — итоговое значение: diff --git a/modules/40-variables/90-interpolation/ru/README.md b/modules/40-variables/90-interpolation/ru/README.md index f325897..bce4909 100644 --- a/modules/40-variables/90-interpolation/ru/README.md +++ b/modules/40-variables/90-interpolation/ru/README.md @@ -26,6 +26,6 @@ Console.WriteLine($"{greeting}, {firstName}!"); В одной строке можно делать сколько угодно подобных блоков. -Чтобы в строке начала работать интерполяция перед ее началом надо добавить знак «доллара» – **$**. Обратите внимание что знак стоит _до_ открывающей кавычки, а не _после_ неё. +Чтобы в строке начала работать интерполяция, перед ее началом надо добавить знак «доллара» – **$**. Обратите внимание, что знак стоит _до_ открывающей кавычки, а не _после_ неё. Почти во всех языках интерполяция предпочтительнее конкатенации для объединения строк. Строка при этом получается склеенная, и внутри неё хорошо просматриваются пробелы и другие символы. Во-первых, интерполяция позволяет не путать строки с числами (из-за знака +), а во-вторых, так гораздо проще (после некоторой практики) понимать строку целиком. diff --git a/modules/50-data-types/10-data-types-basics/ru/README.md b/modules/50-data-types/10-data-types-basics/ru/README.md index 9993896..1f6ca4f 100644 --- a/modules/50-data-types/10-data-types-basics/ru/README.md +++ b/modules/50-data-types/10-data-types-basics/ru/README.md @@ -1,5 +1,5 @@ -Внутри высокоуровневых языков программирования данные разделяются по типам. Например строки относятся к типу **string**, а числа — к типу **int**. Зачем нужны типы? Для защиты программы от трудноотловимых ошибок. Типы определяют две вещи: +Внутри высокоуровневых языков программирования данные разделяются по типам. Например, строки относятся к типу **string**, а числа — к типу **int**. Зачем нужны типы? Для защиты программы от трудноуловимых ошибок. Типы определяют две вещи: - Возможные (допустимые) значения. Например, числа в C# делятся на две группы типов: int и float. Первые — целые числа, вторые – рациональные. Такое разделение связано с техническими особенностями работы аппаратуры. - Набор операций, которые можно выполнять над этим типом. Например, операция умножения имеет смысл для типа «целые числа». Но не имеет смысла для типа «строки»: умножать слово «мама» на слово «блокнот» — бессмыслица. diff --git a/modules/50-data-types/30-data-types-list/ru/README.md b/modules/50-data-types/30-data-types-list/ru/README.md index 0dd4458..5b2b038 100644 --- a/modules/50-data-types/30-data-types-list/ru/README.md +++ b/modules/50-data-types/30-data-types-list/ru/README.md @@ -1,5 +1,5 @@ -В этом уроке мы рассмотрим систему типов в C# с высоты птичьего полета, не погружаясь в детали. Но сначала ответим на вопрос, зачем вообще про них знать? В коде программ мы все время оперируем данными. Эти данные имеют разную природу, могут быть по разному организованы, что влияет и на удобство работы с ними и эффективность этой работы. Типы преследуют нас буквально на каждом шагу, поэтому без их изучения программирование на C# возможно только на очень базовом уровне. +В этом уроке мы рассмотрим систему типов в C# с высоты птичьего полета, не погружаясь в детали. Но сначала ответим на вопрос, зачем вообще про них знать? В коде программ мы все время оперируем данными. Эти данные имеют разную природу, могут быть по-разному организованы, что влияет и на удобство работы с ними и эффективность этой работы. Типы преследуют нас буквально на каждом шагу, поэтому без их изучения программирование на C# возможно только на очень базовом уровне. С другой стороны не пытайтесь запомнить всю эту информацию про типы наизусть (иначе можно приуныть). Она дается лишь для общего представления. Все что надо знать про типы вы и так выучите в процессе программирования. @@ -9,7 +9,7 @@ Всего в языке 18 встроенных типов данных. Полный список вы сможете найти в [документации к языку](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/built-in-types). Тут же мы проведем краткий обзор. -10 из 18 типов используются для представления целых чисел. Это типы _byte_, _sbyte_, _short_, _ushort_, _int_, _uint_, _nint_, _nuint_, _long_, _ulong_. Отличаются они прежде всего количеством занимаемой памяти и, как следствие, диапазоном возможных значений. Например _byte_ занимает в памяти, как ни трудно догадаться, один байт, а значит может хранить числа от 0 до 255 (здесь мы не погружаемся в основы двоичной системы счисления, просто поверьте на слово). _short_ и _ushort_ – 2 байта, _int_ и _uint_ – 4 байта и _long_ и _ulong_ – 8 байт. _nint_ и _nuint_ могут иметь как 4 так и 8 байт в зависимости от разрядности системы. Приставка **u** означает что это беззнаковый (unsigned) тип – он может хранить только целые числа без знака. +10 из 18 типов используются для представления целых чисел. Это типы _byte_, _sbyte_, _short_, _ushort_, _int_, _uint_, _nint_, _nuint_, _long_, _ulong_. Отличаются они прежде всего количеством занимаемой памяти и, как следствие, диапазоном возможных значений. Например, _byte_ занимает в памяти, как ни трудно догадаться, один байт, а значит может хранить числа от 0 до 255 (здесь мы не погружаемся в основы двоичной системы счисления, просто поверьте на слово). _short_ и _ushort_ – 2 байта, _int_ и _uint_ – 4 байта и _long_ и _ulong_ – 8 байт. _nint_ и _nuint_ могут иметь как 4, так и 8 байт в зависимости от разрядности системы. Приставка **u** означает, что это беззнаковый (unsigned) тип – он может хранить только целые числа без знака. ```cs diff --git a/modules/50-data-types/40-null/ru/README.md b/modules/50-data-types/40-null/ru/README.md index dff2dc8..5113be5 100644 --- a/modules/50-data-types/40-null/ru/README.md +++ b/modules/50-data-types/40-null/ru/README.md @@ -1,5 +1,5 @@ -Особняком в C# стоит значение null. Здесь оно, в отличии от других языков программирования, не является типом, это просто конкретное значение со специальным смыслом и логикой работы. Начнем с примера: +Особняком в C# стоит значение null. Здесь оно, в отличие от других языков программирования, не является типом, это просто конкретное значение со специальным смыслом и логикой работы. Начнем с примера: ```cs // Определение переменной с инициализацией null diff --git a/modules/60-methods-using/10-methods/ru/README.md b/modules/60-methods-using/10-methods/ru/README.md index e522c95..6820e0c 100644 --- a/modules/60-methods-using/10-methods/ru/README.md +++ b/modules/60-methods-using/10-methods/ru/README.md @@ -13,7 +13,7 @@ "hexlet".ToUpper(); // HEXLET ``` -Методы это действия, которые нужно выполнить над данными, к которым они применяются. В программировании данные у которых есть методы называют объектами. В реальности все чуть сложнее, но пока нам достаточно и такого определения. +Методы это действия, которые нужно выполнить над данными, к которым они применяются. В программировании данные, у которых есть методы, называют объектами. В реальности все чуть сложнее, но пока нам достаточно и такого определения. Рассмотрим еще несколько примеров с добавлением переменных: diff --git a/modules/60-methods-using/20-methods-parameters/ru/README.md b/modules/60-methods-using/20-methods-parameters/ru/README.md index f49231f..3714e50 100644 --- a/modules/60-methods-using/20-methods-parameters/ru/README.md +++ b/modules/60-methods-using/20-methods-parameters/ru/README.md @@ -18,7 +18,7 @@ name[lastCharIndex]; // 'n' ## Несколько аргументов -Параметров может быть больше чем один. Например метод `Replace()` работает с двумя, где первый это что заменить и второй – на что. +Параметров может быть больше, чем один. Например, метод `Replace()` работает с двумя, где первый это что заменить и второй – на что. ```cs var name = "Ramsay Snow"; diff --git a/modules/60-methods-using/25-properties/ru/README.md b/modules/60-methods-using/25-properties/ru/README.md index b092fb8..78cbc79 100644 --- a/modules/60-methods-using/25-properties/ru/README.md +++ b/modules/60-methods-using/25-properties/ru/README.md @@ -16,7 +16,7 @@ var totalSymbols = name.Length + house.Length; Console.WriteLine(totalSymbols); // => 10 ``` -Свойства есть и у типов. Такие свойства называются статическими. Например у всех числовых типов (byte, short, int, long и т.д.) есть свойства `MinValue` и `MaxValue`. +Свойства есть и у типов. Такие свойства называются статическими. Например, у всех числовых типов (byte, short, int, long и т.д.) есть свойства `MinValue` и `MaxValue`. ```cs byte.MaxValue; // 255 diff --git a/modules/60-methods-using/30-methods-as-expressions/ru/README.md b/modules/60-methods-using/30-methods-as-expressions/ru/README.md index 9804b04..942dd23 100644 --- a/modules/60-methods-using/30-methods-as-expressions/ru/README.md +++ b/modules/60-methods-using/30-methods-as-expressions/ru/README.md @@ -27,7 +27,7 @@ Console.WriteLine(sum); Почему об этом важно знать? Как вы увидите дальше, выражения можно комбинировать получая все более сложное поведение в самых неожиданных местах и самым неожиданным образом. Вы будете лучше понимать как можно соединять части кода, чтобы получить нужный результат. -Поговорим о методах. Вызов метода это выражение или нет? Мы знаем что методы возвращают результат, то есть да, они выражения. Из этого автоматически следует много интересного. Например мы можем использовать вызов метода прямо в математических операциях. Вот как можно получить индекс последнего символа в слове: +Поговорим о методах. Вызов метода это выражение или нет? Мы знаем, что методы возвращают результат, то есть да, они выражения. Из этого автоматически следует много интересного. Например, мы можем использовать вызов метода прямо в математических операциях. Вот как можно получить индекс последнего символа в слове: ```cs var name = "Stark"; diff --git a/modules/60-methods-using/40-string-immutability/ru/README.md b/modules/60-methods-using/40-string-immutability/ru/README.md index e14a1cf..5897222 100644 --- a/modules/60-methods-using/40-string-immutability/ru/README.md +++ b/modules/60-methods-using/40-string-immutability/ru/README.md @@ -29,4 +29,4 @@ var processedName = name.ToLower(); Console.WriteLine(processedName); // => "hodor" ``` -Такой подход нередко предпочтительнее, по соображением читаемости. Переменные, которые постоянно меняются сложнее анализировать. В конечном итоге все зависит от задачи и понимание того как лучше приходит с опытом. +Такой подход нередко предпочтительнее, по соображениям читаемости. Переменные, которые постоянно меняются, сложнее анализировать. В конечном итоге все зависит от задачи и понимание того, как лучше, приходит с опытом. diff --git a/modules/60-methods-using/50-methods-chain/ru/README.md b/modules/60-methods-using/50-methods-chain/ru/README.md index db1c559..55692a4 100644 --- a/modules/60-methods-using/50-methods-chain/ru/README.md +++ b/modules/60-methods-using/50-methods-chain/ru/README.md @@ -1,7 +1,7 @@ Обработка данных может состоять из достаточно большого количества шагов, которые нужно выполнить. Возьмем для примера такую задачу: На основе введенного пользователем названия статьи сформировать адрес страницы в интернете. Такая задача часто возникает при публикации статей в блогах. Подобные адреса выглядят так: . Последняя часть здесь _iz-vahtovika-v-programmirovanie_ создана автоматически кодом, который мы написали на Хекслете. Кстати у нее есть специальное название – это [слаг](https://en.wikipedia.org/wiki/Clean_URL#Slug). -Какие шаги нужно выполнить чтобы получить подобную строку? Вот лишь некоторые из них: +Какие шаги нужно выполнить, чтобы получить подобную строку? Вот лишь некоторые из них: - Перевести все в нижний регистр, чтобы случайно не создавались дубли одинаковых страниц в поисковых системах - Очистить название от пробельных символов на концах. Там они могут случайно появиться при вводе названия diff --git a/modules/60-methods-using/90-methods-variants/ru/README.md b/modules/60-methods-using/90-methods-variants/ru/README.md index eb68708..b4f92a9 100644 --- a/modules/60-methods-using/90-methods-variants/ru/README.md +++ b/modules/60-methods-using/90-methods-variants/ru/README.md @@ -1,5 +1,5 @@ -Одна из базовых тем в C#, на которой строится код – классы и объекты. Базовая потому что все это появляется буквально с первых строчек кода, но она совсем не базовая с точки зрения понимания и использования. Поэтому изучение растягивается на множество уроков. В этом уроке, мы чуть больше окунемся в устройство языка, но не переживайте что пазл все еще не складывается, это нормально, мы пока не готовы полноценно говорить об ООП в C#. +Одна из базовых тем в C#, на которой строится код – классы и объекты. Базовая, потому что все это появляется буквально с первых строчек кода, но она совсем не базовая с точки зрения понимания и использования. Поэтому изучение растягивается на множество уроков. В этом уроке мы чуть больше окунемся в устройство языка, но не переживайте, что пазл все еще не складывается, это нормально, мы пока не готовы полноценно говорить об ООП в C#. Мы уже сталкивались с методами встроенными в C# в разных формах: @@ -29,7 +29,7 @@ currentDate.ToShortDateString(); file.Delete(); ``` -Такие методы выполняют действия над объектами у которых они вызываются и часто не принимают никаких аргументов. Объекты для простоты можно воспринимать как данные, которые доступны внутри метода. Например метод строки `ToLower()`, внутри себя берет исходную строку, преобразует ее и возвращает результат наружу. +Такие методы выполняют действия над объектами, у которых они вызываются и часто не принимают никаких аргументов. Объекты для простоты можно воспринимать как данные, которые доступны внутри метода. Например, метод строки `ToLower()` внутри себя берет исходную строку, преобразует ее и возвращает результат наружу. ## Вызовы статических методов @@ -43,7 +43,7 @@ Math.Sqrt(4); File.ReadAllText("readme.txt"); ``` -Классы `Console`, `Math` и `File` в данном случае нужны только для вызова, потому что методы определены внутри них. Но сами методы с классами не взаимодействуют, в отличии от вызовов методов у объектов. +Классы `Console`, `Math` и `File` в данном случае нужны только для вызова, потому что методы определены внутри них. Но сами методы с классами не взаимодействуют, в отличие от вызовов методов у объектов. Честно говоря, здесь не все так просто. Всегда можно придумать какой-то объект, над которым происходит вычисление. Так же верно и обратное, всегда можно обойтись без объектов. Есть языки в которых объектов нет вообще. В конечном итоге, все решают те кто проектирует конкретную часть кода. diff --git a/modules/70-methods-definition/10-method-definition-static/ru/README.md b/modules/70-methods-definition/10-method-definition-static/ru/README.md index 955af56..a783f53 100644 --- a/modules/70-methods-definition/10-method-definition-static/ru/README.md +++ b/modules/70-methods-definition/10-method-definition-static/ru/README.md @@ -57,7 +57,7 @@ Console.WriteLine("Hello"); // WriteLine() – "инструмент" для вывода информации в консоль ``` -Помимо `WriteLine()` в `Console` есть и другие свойства и методы. Попробуйте найти в документации что еще можно делать через этот класс. +Помимо `WriteLine()` в `Console` есть и другие свойства и методы. Попробуйте найти в документации, что еще можно делать через этот класс. ## Определение метода в классе @@ -96,7 +96,7 @@ class App _static_ отвязывает метод от объекта и делает возможным его вызов напрямую из класса. На протяжение этого курса, все методы, которые мы создадим, будут статичными. Поэтому просто не забывайте его ставить каждый раз, когда создаете метод. -_void_ используется тогда, когда метод ничего не возвращает. Например такое определение у метода `WriteLine()`. А вот если метод возвращает какие-то данные, то вместо _void_ будет указан тип возвращаемых данных. Подробнее об этом в следующем уроке. +_void_ используется тогда, когда метод ничего не возвращает. Например, такое определение у метода `WriteLine()`. А вот если метод возвращает какие-то данные, то вместо _void_ будет указан тип возвращаемых данных. Подробнее об этом в следующем уроке. В отличие от обычных данных, методы выполняют действия, поэтому их имена практически всегда должны быть глаголами: «построить что-то», «нарисовать что-то», «открыть что-то». diff --git a/modules/70-methods-definition/20-method-definition-return/ru/README.md b/modules/70-methods-definition/20-method-definition-return/ru/README.md index 1bd6a51..50a96df 100644 --- a/modules/70-methods-definition/20-method-definition-return/ru/README.md +++ b/modules/70-methods-definition/20-method-definition-return/ru/README.md @@ -64,7 +64,7 @@ class App Вместо `void` теперь написано `string`, потому что у метода есть возврат. Так мы указали C#, что результатом работы метода будет строка. -`return` – особая инструкция, которая берет выражение, записанное справа и отдает его наружу, тому коду, который вызвал метод. Как только C# натыкается на `return`, выполнение метода на этом завершается. +`return` – особая инструкция, которая берет выражение, записанное справа, и отдает его наружу, тому коду, который вызвал метод. Как только C# натыкается на `return`, выполнение метода на этом завершается. ```cs // Теперь этот код работает diff --git a/modules/70-methods-definition/30-method-definition-parameters/ru/README.md b/modules/70-methods-definition/30-method-definition-parameters/ru/README.md index 539d469..0a01945 100644 --- a/modules/70-methods-definition/30-method-definition-parameters/ru/README.md +++ b/modules/70-methods-definition/30-method-definition-parameters/ru/README.md @@ -57,7 +57,7 @@ App.GetLastChar(); // такой код не имеет смысла // => error CS7036: There is no argument given that corresponds to the required parameter 'str' of 'App.GetLastChar(string)' ``` -Точно таким же образом можно указывать два, три и более параметров. Каждый параметр отделяется от другого запятой. +Точно таким же образом можно указывать два, три и более параметра. Каждый параметр отделяется от другого запятой. ```cs App.Average(1, 5); // 3.0 diff --git a/modules/70-methods-definition/40-method-definition-default-parameters/ru/README.md b/modules/70-methods-definition/40-method-definition-default-parameters/ru/README.md index 5fcac6b..b06d202 100644 --- a/modules/70-methods-definition/40-method-definition-default-parameters/ru/README.md +++ b/modules/70-methods-definition/40-method-definition-default-parameters/ru/README.md @@ -1,7 +1,7 @@ В программировании большое количество функций и методов имеют параметры, которые редко меняются. В C# для решения этой проблемы есть 2 способа: значение параметров по умолчанию и перегрузка методов. Сейчас мы рассмотрим выставление значений параметров по умолчанию. -Например мы хотим написать метод, который будет помогать северянам давать имена своим детям: +Например, мы хотим написать метод, который будет помогать северянам давать имена своим детям: ```cs North.PickName("Sansa", "Stark"); // "Sansa Stark" diff --git a/modules/80-logic/20-predicates/ru/README.md b/modules/80-logic/20-predicates/ru/README.md index 8d1c189..525e8a8 100644 --- a/modules/80-logic/20-predicates/ru/README.md +++ b/modules/80-logic/20-predicates/ru/README.md @@ -9,7 +9,7 @@ public static bool IsInfant(int age) Console.WriteLine(App.IsInfant(3)); // => false ``` -Подобные методы называют предикатами. методы-предикаты (или методы-вопросы) отвечают на какой-то вопрос и всегда (без исключений!) возвращают либо `true`, либо `false`. +Подобные методы называют предикатами. Методы-предикаты (или методы-вопросы) отвечают на какой-то вопрос и всегда (без исключений!) возвращают либо `true`, либо `false`. Предикаты во всех языках принято именовать особым образом для простоты анализа. В C# предикаты, как правило, начинаются с префикса `Is`, `Has` или `Can`, но не ограничены этими словами. Примеры: diff --git a/modules/80-logic/50-logical-negation/ru/EXERCISE.md b/modules/80-logic/50-logical-negation/ru/EXERCISE.md index 9a7ef6b..eb81e6c 100644 --- a/modules/80-logic/50-logical-negation/ru/EXERCISE.md +++ b/modules/80-logic/50-logical-negation/ru/EXERCISE.md @@ -11,6 +11,6 @@ Примеры вызова: ```cs -App.IsNotLannisterSoldier('red', 'lion'); // false -App.IsNotLannisterSoldier('blue', null); // true +App.IsNotLannisterSoldier("red", "lion"); // false +App.IsNotLannisterSoldier("blue", null); // true ``` diff --git a/modules/90-conditionals/10-if/ru/README.md b/modules/90-conditionals/10-if/ru/README.md index e972a78..50a0481 100644 --- a/modules/90-conditionals/10-if/ru/README.md +++ b/modules/90-conditionals/10-if/ru/README.md @@ -1,5 +1,5 @@ -Условные конструкции позволяют выполнять разный код основываясь на логических проверках. Например если у человека есть деньги на счету, то во время покупки деньги спишутся автоматически, если нет, то операция будет отклонена. +Условные конструкции позволяют выполнять разный код, основываясь на логических проверках. Например, если у человека есть деньги на счету, то во время покупки деньги спишутся автоматически, если нет, то операция будет отклонена. Напишем, для примера, метод, который определяет тип переданного предложения. Для начала она будет отличать обычные предложения от вопросительных. diff --git a/modules/90-conditionals/20-if-else/ru/README.md b/modules/90-conditionals/20-if-else/ru/README.md index e6ea43e..8f46c29 100644 --- a/modules/90-conditionals/20-if-else/ru/README.md +++ b/modules/90-conditionals/20-if-else/ru/README.md @@ -13,7 +13,7 @@ else } ``` -Такая структура может понадобится при начальной инициализации значения. В примере ниже проверяется, если `email` отсутствует, то устанавливаем значение по умолчанию, если его передали, то выполняем нормализацию. +Такая структура может понадобиться при начальной инициализации значения. В примере ниже проверяется, если `email` отсутствует, то устанавливаем значение по умолчанию, если его передали, то выполняем нормализацию. ```cs diff --git a/modules/95-loops/15-aggregation-numbers/ru/README.md b/modules/95-loops/15-aggregation-numbers/ru/README.md index 47e1624..4f21432 100644 --- a/modules/95-loops/15-aggregation-numbers/ru/README.md +++ b/modules/95-loops/15-aggregation-numbers/ru/README.md @@ -15,7 +15,7 @@ App.SumNumbersFromRange(1, 1); // 1 App.SumNumbersFromRange(100, 100); // 100 ``` -Для реализации этого кода нам понадобится цикл, так как сложение чисел – это итеративный процесс (он повторяется для каждого числа), а количество итераций зависит от размера диапазона. Перед тем, как смотреть код, попробуйте ответьте на вопросы ниже: +Для реализации этого кода нам понадобится цикл, так как сложение чисел – это итеративный процесс (он повторяется для каждого числа), а количество итераций зависит от размера диапазона. Перед тем, как смотреть код, попробуйте ответить на вопросы ниже: - Каким значением инициализировать счетчик? - Как он будет изменяться? @@ -61,6 +61,6 @@ sum = sum + 5; // 14 // 14 – результат сложения чисел в диапазоне [2, 5] ``` -В математике существует понятие **нейтральный элемент операции** (у каждой операции свой элемент). Это понятие имеет очень простой смысл. Операция с этим элементом не изменяет то значение, над которым проводится операция. В сложении любое число плюс ноль дает само число. При вычитании – тоже самое. Даже у конкатенации есть нейтральный элемент – это пустая строка: `"" + "one"` будет `"one"`. +В математике существует понятие **нейтральный элемент операции** (у каждой операции свой элемент). Это понятие имеет очень простой смысл. Операция с этим элементом не изменяет то значение, над которым проводится операция. В сложении любое число плюс ноль дает само число. При вычитании – то же самое. Даже у конкатенации есть нейтральный элемент – это пустая строка: `"" + "one"` будет `"one"`. Вопрос на самопроверку. Какой нейтральный элемент у операции умножения?