For
Содержание:
- jQuery.each() Syntax
- htmlString
- jQuery Each For Loop Example
- Функции-«колбэки»
- Внутреннее устройство массива
- Приоритет операторов
- Перебор коллекций — Цикл foreach C#
- Цикл foreach
- Предложения
- Number
- jQuery .each() Arithmetic Addition Example
- Термины: «унарный», «бинарный», «операнд»
- Блоки кода и циклы, IIFE
- Пустые элементы
- Conclusion
- sort
- #41. «Основы 5 востребованных видов текста: информационные, продающие, SMM, сторителлинг и брендинг-тексты» от Школы Надежды Раюшкиной
- Присваивание
jQuery.each() Syntax
Let’s see the different modes in action.
The following example selects every element on a web page and outputs the index and the ID of each of them:
A possible output would be:
This version uses jQuery’s function, as opposed to the utility function.
The next example shows the use of the utility function. In this case the object to loop over is given as the first argument. In this example, we’ll show how to loop over an array:
In the last example, we want to demonstrate how to iterate over the properties of an object:
This all boils down to providing a proper callback. The callback’s context, , will be equal to its second argument, which is the current value. However, since the context will always be an object, primitive values have to be wrapped:
`
This means that there’s no strict equality between the value and the context.
`
The first argument is the current index, which is either a number (for arrays) or string (for objects).
htmlString
A string is designated htmlString in jQuery documentation when it is used to represent one or more DOM elements, typically to be created and inserted in the document. When passed as an argument of the function, the string is identified as HTML if it starts with ) and is parsed as such until the final character. Prior to jQuery 1.9, a string was considered to be HTML if it contained anywhere within the string.
When a string as passed as an argument to a manipulation method such as , it is always considered to be HTML since jQuery’s other common interpretation of a string (CSS selectors) does not apply in those contexts.
For explicit parsing of a string to HTML, the method is available as of jQuery 1.8.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
jQuery Each For Loop Example
You can use the jQuery Each method instead of the For Loop. Let’s find out how it is possible.
The For Loop Example
var allDiv = $("div"); for ( var i=0; i<allDiv.length; i++) { // use allDiv for accessing each one }
The above for loop iterates over every div element in the page. This can be done by the .each() method also.
$("div").each(function(index,value) { //$(this) for accessing each of them });
jQuery Each Chaining Example
You can do the chaining of the .each() method, and this is not possible with the for loop. See the below code which sets the background to purple color, for every odd paragraph element.
$("p").each(function (index, value) { // for all paragraph }).filter(":odd").each(function (index, value) { $(value).css("background-color", "purple"); // Or $(this).css("background-color", "purple"); });
ADS – Find all the info that you need about ” dentist albert park dentistportmelbourne ” at https://dentistportmelbourne.com.au
Функции-«колбэки»
Рассмотрим ещё примеры функциональных выражений и передачи функции как значения.
Давайте напишем функцию с тремя параметрами:
- Текст вопроса
- Функция, которая будет вызываться, если ответ будет «Yes»
- Функция, которая будет вызываться, если ответ будет «No»
Наша функция должна задать вопрос и, в зависимости от того, как ответит пользователь, вызвать или :
На практике подобные функции очень полезны. Основное отличие «реальной» функции от примера выше будет в том, что она использует более сложные способы взаимодействия с пользователем, чем простой вызов . В браузерах такие функции обычно отображают красивые диалоговые окна. Но это уже другая история.
Аргументы функции ещё называют функциями-колбэками или просто колбэками.
Ключевая идея в том, что мы передаём функцию и ожидаем, что она вызовется обратно (от англ. «call back» – обратный вызов) когда-нибудь позже, если это будет необходимо. В нашем случае, становится колбэком’ для ответа «yes», а – для ответа «no».
Мы можем переписать этот пример значительно короче, используя Function Expression:
Здесь функции объявляются прямо внутри вызова . У них нет имён, поэтому они называются анонимными. Такие функции недоступны снаружи (потому что они не присвоены переменным), но это как раз то, что нам нужно.
Подобный код, появившийся в нашем скрипте выглядит очень естественно, в духе JavaScript.
Функция – это значение, представляющее «действие»
Обычные значения, такие как строки или числа представляют собой данные.
Функции, с другой стороны, можно воспринимать как «действия».
Мы можем передавать их из переменной в переменную и запускать, когда захотим.
Внутреннее устройство массива
Массив – это особый подвид объектов. Квадратные скобки, используемые для того, чтобы получить доступ к свойству – это по сути обычный синтаксис доступа по ключу, как , где в роли у нас , а в качестве ключа – числовой индекс.
Массивы расширяют объекты, так как предусматривают специальные методы для работы с упорядоченными коллекциями данных, а также свойство . Но в основе всё равно лежит объект.
Следует помнить, что в JavaScript существует 8 основных типов данных. Массив является объектом и, следовательно, ведёт себя как объект.
…Но то, что действительно делает массивы особенными – это их внутреннее представление. Движок JavaScript старается хранить элементы массива в непрерывной области памяти, один за другим, так, как это показано на иллюстрациях к этой главе. Существуют и другие способы оптимизации, благодаря которым массивы работают очень быстро.
Но все они утратят эффективность, если мы перестанем работать с массивом как с «упорядоченной коллекцией данных» и начнём использовать его как обычный объект.
Например, технически мы можем сделать следующее:
Это возможно, потому что в основе массива лежит объект. Мы можем присвоить ему любые свойства.
Но движок поймёт, что мы работаем с массивом, как с обычным объектом. Способы оптимизации, используемые для массивов, в этом случае не подходят, поэтому они будут отключены и никакой выгоды не принесут.
Варианты неправильного применения массива:
- Добавление нечислового свойства, например: .
- Создание «дыр», например: добавление , затем (между ними ничего нет).
- Заполнение массива в обратном порядке, например: , и т.д.
Массив следует считать особой структурой, позволяющей работать с упорядоченными данными. Для этого массивы предоставляют специальные методы. Массивы тщательно настроены в движках JavaScript для работы с однотипными упорядоченными данными, поэтому, пожалуйста, используйте их именно в таких случаях. Если вам нужны произвольные ключи, вполне возможно, лучше подойдёт обычный объект .
Приоритет операторов
В том случае, если в выражении есть несколько операторов – порядок их выполнения определяется приоритетом, или, другими словами, существует определённый порядок выполнения операторов.
Из школы мы знаем, что умножение в выражении выполнится раньше сложения. Это как раз и есть «приоритет». Говорят, что умножение имеет более высокий приоритет, чем сложение.
Скобки важнее, чем приоритет, так что, если мы не удовлетворены порядком по умолчанию, мы можем использовать их, чтобы изменить приоритет. Например, написать .
В JavaScript много операторов. Каждый оператор имеет соответствующий номер приоритета. Тот, у кого это число больше, – выполнится раньше. Если приоритет одинаковый, то порядок выполнения – слева направо.
Отрывок из таблицы приоритетов (нет необходимости всё запоминать, обратите внимание, что приоритет унарных операторов выше, чем соответствующих бинарных):
Приоритет | Название | Обозначение |
---|---|---|
… | … | … |
17 | унарный плюс | |
17 | унарный минус | |
16 | возведение в степень | |
15 | умножение | |
15 | деление | |
13 | сложение | |
13 | вычитание | |
… | … | … |
3 | присваивание | |
… | … | … |
Так как «унарный плюс» имеет приоритет , который выше, чем у «сложения» (бинарный плюс), то в выражении сначала выполнятся унарные плюсы, а затем сложение.
Перебор коллекций — Цикл foreach C#
Допустим, мы имеем массив значений, не важно каких: числа, строки, символы… Для перебора массива удобно использовать этот вид цикла. Выглядит он следующим образом:. Предположим, у нас есть список городов, и нужно найти все города, начинающиеся с заданного символа
Предположим, у нас есть список городов, и нужно найти все города, начинающиеся с заданного символа.
Пользователь вводит символ, после чего для каждого элемента массива проверяется, начинается ли он с заданного символа. И, если условие выполняется, элемент массива запоминается в результирующей строке. Главным плюсом foreach является то, что он исключает возможность выхода за границы массива.
Управление циклом. Команды break и countinue
Для управления циклом в языке C# используются два оператора: break и continue.
Оператор break используется для прерывания выполнения цикла. Пусть, нам нужно найти некоторый элемент в массиве. Так, используя цикл, мы можем выйти из цикла, как только найдем искомый элемент.
Так мы находим индекс искомого слова в массиве, при этом не выполняем лишних операций после того, как найдем искомый элемент.
Оператор continue используется для перехода к следующей итерации цикла. Рассмотрим задачу: необходимо вычислить сумму пяти частных вида:
Как вы видите, при i = a будет получена ошибка «Деление на ноль». В данном случае мы можем пропускать значение счетчика, которое приводит к ошибке.
Цикл foreach
Цикл foreach служит для циклического обращения к элементам коллекции,
представляющей собой группу объектов. В C# определено несколько видов коллекций, каждая из которых является массивом. Ниже приведена общая форма оператора
цикла foreach:
foreach (тип имя_переменной_цикла in коллекция) оператор;
Здесь тип имя_переменной_цикла обозначает тип и имя переменной управления циклом, которая получает значение следующего элемента коллекции на каждом
шаге выполнения цикла foreach. А коллекция обозначает циклически опрашиваемую коллекцию, которая здесь и далее представляет собой массив. Следовательно, тип
переменной цикла должен соответствовать типу элемента массива. Кроме того, тип
может обозначаться ключевым словом var. В этом случае компилятор определяет тип
переменной цикла, исходя из типа элемента массива. Это может оказаться полезным для работы с определенного рода запросами.
Но, как правило, тип указывается явным образом.
Оператор цикла foreach действует следующим образом. Когда цикл начинается,
первый элемент массива выбирается и присваивается переменной цикла. На каждом последующем шаге итерации выбирается следующий элемент массива, который сохраняется в переменной цикла. Цикл завершается, когда все элементы массива окажутся выбранными.
Цикл foreach позволяет проходить по каждому элементу коллекции (объект, представляющий список других объектов).
Формально для того, чтобы нечто можно было рассматривать как коллекцию, это нечто должно поддерживать интерфейс IEnumerable. Примерами коллекций могут служить массивы C#, классы коллекций из пространства имен System.Collection, а также пользовательские классы коллекций.
Пример использования цикла foreach:
Попробуйте запустить данный пример несколько раз и вы наглядно увидите, что элементы массива изменяются каждый раз (с помощью метода Random.Next), и соответственно опрашиваются в цикле foreach. Мой результат:
Предложения
These elevators are each capable of carrying ten persons.Каждый из этих лифтов может поднять десять человек.
Tom and Mary waved to each other.Том и Мэри помахали друг другу рукой.
Each passing car threw up a cloud of dust.Каждая проезжавшая машина оставляла после себя облако пыли.
Each of the three boys won a prize.Каждый из трёх мальчиков получил приз.
They lived in harmony with each other.Они жили в гармонии друг с другом.
You have to take this powder after each meal.Вам надо принимать этот порошок после каждого приёма пищи.
To each his own.Каждому своё.
Each child has his own room.У каждого ребенка своя отдельная комната.
Tom and Mary usually speak French to each other.Том и Мэри обычно говорят друг с другом по-французски.
Each of them has a bicycle.У каждого был велосипед.
Isn’t it a pity that Tom and Mary can’t get along with each other?Какая жалость, что Том и Мэри не могут ужиться!
We should talk calmly to each other.Нам следует говорить друг с другом спокойно.
Have you and Tom ever kissed each other?Вы с Томом когда-нибудь целовались?
I’m glad we understand each other.Я рад, что мы понимаем друг друга.
They are talking past each other.Они говорят, как слепой с глухим.
They chatted with each other to pass the time.Они болтали друг с другом, чтобы скоротать время.
Tom and Mary could learn a lot from each other.Том и Мэри могли многому научиться друг у друга.
How much wheat does each field yield?Какой урожай пшеницы приносит каждое поле?
Why do people envy each other?Почему люди друг другу завидуют?
Each time I see Mary, I learn something new and important from her.Каждый раз, когда вижу Мэри, я узнаю что-то новое и важное от неё. John and Mary loved each other.Джон и Мэри любили друг друга
John and Mary loved each other.Джон и Мэри любили друг друга.
Tom and Mary insult each other all the time.Том и Мэри постоянно друг друга оскорбляют.
They seem to be in love with each other.Кажется, они влюблены друг в друга.
Have we understood each other?Мы друг друга поняли?
We’re not speaking to each other.Мы друг с другом не разговариваем.
Each of them was given a prize.Каждый из них удостоился награды.
Wait, don’t shoot at each other!Погодите, не стреляйтесь!
«We haven’t seen each other in a long time, Tom! Have you put on a little weight?» «Yes, lately I haven’t been able to get myself to move around at all.»»Мы давно не виделись, Том! Ты прибавил немного веса?» «Да, недавно я не мог заставить себя хоть как-то двигаться».
Did they already know each other?Они уже знали друг друга?
I bought them each a present.Я им всем купил по подарку.
Number
Numbers in JavaScript are double-precision 64-bit format IEEE 754 values. They are immutable primitive values, just like . All operators common in c-based languages are available to work with numbers (+, -, *, /, %, =, +=, -=, *=, /=, ++, —).
1 2 |
The type of a number is «number».
1 2 |
Boolean Default
If a number is zero, it defaults to false:
1 2 3 4 |
Due to the implementation of numbers as double-precision values, the following result is not an error:
1 |
JavaScript provides utilities to work with numbers in the Math object:
1 2 |
Parsing Numbers
parseInt and parseFloat help parsing strings into numbers. Both do some implicit conversion if the base isn’t specified:
1 2 3 4 5 6 |
Numbers to Strings
When appending numbers to string, the result is always a string. The operator is the same, so be careful: If you want to add numbers and then append them to a string, put parentheses around the numbers:
1 2 3 4 |
Or you use the String class provided by javascript, which try to parse a value as string:
1 2 |
NaN and Infinity
Parsing something that isn’t a number results in NaN. isNaN helps to detect those cases:
1 2 |
Division by zero results in Infinity:
1 |
Both NaN and Infinity are of type «number»:
1 2 |
Note that NaN compares in a strange way:
1 |
But:
1 |
Integer
An integer is a plain Number type, but whenever explicitly mentioned, indicates that a non-floating-point number is expected.
Float
A float is a plain Number type, just as Integer, but whenever explicitly mentioned, indicates that a floating-point number is expected.
jQuery .each() Arithmetic Addition Example
Addition of numbers in an array can be performed with jQuery .each method like:
var sum=0; var numbers = ; $.each(numbers , function (index, value){ sum=sum+value; }); Console.log(sum);
I took a sum variable, then iterated over the numbers array and kept on adding them to the sum variable. Finally outputting the sum at the end.
jQuery Each Break to stop loop early
It is not necessary to wait for the whole loop to execute. You can break out of the loop by using the return false; statement.
Suppose you are searching for a name in an array of strings. You use the jQuery Each method for looping, once you find your name you can get out of the loop with return false;.
var search = "michael"; var loopValue = ""; var names = ; $.each(names, function (index, value) { loopValue += "Index: " + index + " :: " + "Value: " + value + "<br/>"; if (search == value) return false; });
I am searching name ‘michael’, for this, I am checking each name with an if statement. When found, I am coming breaking out of the loop through the return false; statement.
The output which I get here is given below:
It clearly shown the loop is executing till the index number 3 and then coming out.
DEMO DOWNLOAD
jQuery Each – My Final Words
The jQuery Each method is such a valuable method and you can use it to make your code much shorter and smarter.
Remember: $.each() and $(selector).each() are two different methods defined in two different ways.
Термины: «унарный», «бинарный», «операнд»
Прежде, чем мы двинемся дальше, давайте разберёмся с терминологией.
-
Операнд – то, к чему применяется оператор. Например, в умножении есть два операнда: левый операнд равен , а правый операнд равен . Иногда их называют «аргументами» вместо «операндов».
-
Унарным называется оператор, который применяется к одному операнду. Например, оператор унарный минус меняет знак числа на противоположный:
-
Бинарным называется оператор, который применяется к двум операндам. Тот же минус существует и в бинарной форме:
Формально, в последних примерах мы говорим о двух разных операторах, использующих один символ: оператор отрицания (унарный оператор, который обращает знак) и оператор вычитания (бинарный оператор, который вычитает одно число из другого).
Блоки кода и циклы, IIFE
Предыдущие примеры сосредоточены на функциях. Но лексическое окружение существует для любых блоков кода .
Лексическое окружение создаётся при выполнении блока кода и содержит локальные переменные для этого блока. Вот пара примеров.
В следующем примере переменная существует только в блоке :
Когда выполнение попадает в блок , для этого блока создаётся новое лексическое окружение.
У него есть ссылка на внешнее окружение, так что может быть найдена. Но все переменные и Function Expression, объявленные внутри , остаются в его лексическом окружении и не видны снаружи.
Например, после завершения следующий не увидит , что вызовет ошибку.
Для цикла у каждой итерации своё отдельное лексическое окружение. Если переменная объявлена в , то она также в нём:
Обратите внимание: визуально находится снаружи. Но конструкция – особенная в этом смысле, у каждой итерации цикла своё собственное лексическое окружение с текущим в нём
И так же, как и в , ниже цикла невидима.
Мы также можем использовать «простые» блоки кода , чтобы изолировать переменные в «локальной области видимости».
Например, в браузере все скрипты (кроме ) разделяют одну общую глобальную область. Так что, если мы создадим глобальную переменную в одном скрипте, она станет доступна и в других. Но это становится источником конфликтов, если два скрипта используют одно и то же имя переменной и перезаписывают друг друга.
Это может произойти, если название переменной – широко распространённое слово, а авторы скрипта не знают друг о друге.
Если мы хотим этого избежать, мы можем использовать блок кода для изоляции всего скрипта или какой-то его части:
Из-за того, что у блока есть собственное лексическое окружение, код снаружи него (или в другом скрипте) не видит переменные этого блока.
В прошлом в JavaScript не было лексического окружения на уровне блоков кода.
Так что программистам пришлось что-то придумать. И то, что они сделали, называется «immediately-invoked function expressions» (аббревиатура IIFE), что означает функцию, запускаемую сразу после объявления.
Это не то, что мы должны использовать сегодня, но, так как вы можете встретить это в старых скриптах, полезно понимать принцип работы.
IIFE выглядит так:
Здесь создаётся и немедленно вызывается Function Expression. Так что код выполняется сразу же и у него есть свои локальные переменные.
Function Expression обёрнуто в скобки , потому что, когда JavaScript встречает в основном потоке кода, он воспринимает это как начало Function Declaration. Но у Function Declaration должно быть имя, так что такой код вызовет ошибку:
Даже если мы скажем: «хорошо, давайте добавим имя», – это не сработает, потому что JavaScript не позволяет вызывать Function Declaration немедленно.
Так что, скобки вокруг функции – это трюк, который позволяет показать JavaScript, что функция была создана в контексте другого выражения, и, таким образом, это функциональное выражение: ей не нужно имя и её можно вызвать немедленно.
Кроме скобок, существуют и другие пути показать JavaScript, что мы имеем в виду Function Expression:
Во всех перечисленных случаях мы объявляем Function Expression и немедленно выполняем его. Ещё раз заметим, что в настоящий момент нет необходимости писать подобный код.
Пустые элементы
Массивы JavaScript допускают пустые элементы. Массив ниже синтаксически верный и имеет длину 3 элемента:
const arr = ; arr.length; // 3
Что еще более запутывает, так это то, что циклические конструкции трактуют иначе, чем . Ниже показано, как четыре циклических конструкции обрабатывают с пустым элементом. for/in и for/each пропускают пустой элемент, for и for/of — нет.
// Prints "a, undefined, c" for (let i = 0; i < arr.length; ++i) { console.log(arr); } // Prints "a, c" arr.forEach(v => console.log(v)); // Prints "a, c" for (let i in arr) { console.log(arr); } // Prints "a, undefined, c" for (const v of arr) { console.log(v); }
Если вам интересно, все 4 конструкции выведут «a, undefined, c» для .
Есть еще один способ добавить пустой элемент в массив:
// Equivalent to `` const arr = ; arr = 'e';
forEach() и for/in пропускают пустые элементы в массиве, for и for/of — нет. Поведение forEach() может вызвать проблемы, однако можно заметить, что дыры в массивах JavaScript, как правило, встречаются редко, поскольку они не поддерживаются в JSON:
$ node > JSON.parse('{"arr":}') { arr: } > JSON.parse('{"arr":}') { arr: } > JSON.parse('{"arr":}') SyntaxError: Unexpected token , in JSON at position 12
Таким образом, вам не нужно особо беспокоиться о дырах в пользовательских данных, если вы не предоставите своим пользователям доступ ко всей среде выполнения JavaScript.
Вывод: for/in и forEach() не реагируют на пустые элементы, также известные как «дыры», в массиве. Редко есть какая-либо причина рассматривать дыры как особый случай, а не рассматривать индекс как значение undefined. Если вы допускаете наличие дыр, ниже приведен пример файла .eslintrc.yml, который запрещает вызов forEach().
parserOptions: ecmaVersion: 2018 rules: no-restricted-syntax: - error - selector: CallExpression message: Do not use `forEach()`, use `for/of` instead
Conclusion
In this post, we’ve demonstrated how to use the function to iterate over DOM elements, arrays and objects. It’s a powerful and time-saving little function that developers should have in their toolkits.
And if jQuery isn’t your thing, you might want to look at using JavaScript’s native Object.keys() and Array.prototype.forEach() methods. There are also libraries like foreach which let you iterate over the key value pairs of either an array-like object or a dictionary-like object.
Remember: and are two different methods defined in two different ways.
This popular article was updated in 2020 to reflect current best practices and to update the conclusion’s advice on native solutions using modern JavaScript. For more in-depth JavaScript knowledge, read our book, JavaScript: Novice to Ninja, 2nd Edition.
sort
Данный метод
сортирует массив по тому критерию, который указывается в ее необязательной callback-функции:
ar.sort(function(a, b) {
if (a > b) return 1; // если первое значение больше второго
if (a == b) return 0; // если равны
if (a < b) return -1; // если первое значение меньше второго
})
Сортировка
выполняется непосредственно внутри массива ar, но функция
также и возвращает отсортированный массив, правда это возвращаемое значение,
обычно игнорируется. Например:
let dig = 4, 25, 2; dig.sort(); console.log( dig );
И получим
неожиданный результат: 2, 25, 4. Дело в том, что по умолчанию метод sort рассматривает
значения элементов массива как строки и сортирует их в лексикографическом
порядке. В результате, строка «2» < «4» и «25» < «4», отсюда и результат.
Для указания другого критерия сортировки, мы должны записать свою callback-функцию:
dig.sort(function(a, b) { if(a > b) return 1; else if(a < b) return -1; else return ; });
Теперь
сортировка с числами проходит так как нам нужно. Кстати, чтобы изменить
направление сортировки (с возрастания на убывание), достаточно поменять знаки
больше и меньше на противоположные. И второй момент: callback-функция не
обязательно должна возвращать именно 1 и -1, можно вернуть любое положительное,
если a>b и отрицательное
при a<b. В частности,
это позволяет переписать приведенный выше пример вот в такой краткой форме:
dig.sort( (a, b) => a-b );
По аналогии
можно формировать и более сложные алгоритмы сортировки самых разных типов данных:
строк, чисел, объектов, булевых переменных и так далее.
#41. «Основы 5 востребованных видов текста: информационные, продающие, SMM, сторителлинг и брендинг-тексты» от Школы Надежды Раюшкиной
Присваивание
Давайте отметим, что в таблице приоритетов также есть оператор присваивания . У него один из самых низких приоритетов: .
Именно поэтому, когда переменной что-либо присваивают, например, , то сначала выполнится арифметика, а уже затем произойдёт присваивание с сохранением результата в .
Тот факт, что является оператором, а не «магической» конструкцией языка, имеет интересные последствия.
Большинство операторов в JavaScript возвращают значение. Для некоторых это очевидно, например сложение или умножение . Но и оператор присваивания не является исключением.
Вызов записывает в и возвращает его.
Благодаря этому присваивание можно использовать как часть более сложного выражения:
В примере выше результатом будет значение, которое присваивается переменной (то есть ). Потом оно используется для дальнейших вычислений.
Забавное применение присваивания, не так ли? Нам нужно понимать, как это работает, потому что иногда это можно увидеть в JavaScript-библиотеках.
Однако писать самим в таком стиле не рекомендуется. Такие трюки не сделают ваш код более понятным или читабельным.
Рассмотрим ещё одну интересную возможность: цепочку присваиваний.
Такое присваивание работает справа налево. Сначала вычисляется самое правое выражение , и затем результат присваивается переменным слева: , и . В конце у всех переменных будет одно значение.
Опять-таки, чтобы код читался легче, лучше разделять подобные конструкции на несколько строчек:
Польза от такого стиля особенно ощущается при быстром просмотре кода.