Programming Taskbook 0


Download 1.62 Mb.
Pdf ko'rish
bet56/71
Sana21.06.2023
Hajmi1.62 Mb.
#1644761
TuriУчебное пособие
1   ...   52   53   54   55   56   57   58   59   ...   71
Bog'liq
Abramyan-Pascal2016-1

Вспомогательные запросы
Методы sequence of T
 
* ForEach(action: (T[, integer]) -> ()) 
* Print([delim: integer]): sequence of T 
* Println([delim: integer]): sequence of T 

Метод sequence of string
 
* WriteLines(fname: string): sequence of string 
Запрос ForEach является аналогом цикла foreach; он обеспечивает пере-
бор элементов исходной последовательности и выполнение для каждого из 
элементов действия action, описанного в виде лямбда-выражения — пара-
метра запроса ForEach. Заметим, что это единственный из запросов, кото-
рый является процедурой и требует указания процедуры в качестве пара-
метра. 
Использование запроса ForEach приводит к несколько более краткому 
коду, чем использование одноименного цикла, если в цикле требуется вы-
полнить единственный оператор. Вспомним пример из п. 4.5, в котором 
для вывода ключей последовательности с элементами типа IGrouping ис-
пользовался цикл foreach: 
foreach var e in res do 
Print(e.Key);
С применением запроса ForEach это же действие можно записать более 
кратко и тоже достаточно наглядно: 
res.ForEach(e -> Print(e.Key)); 


Глава 4. Запросы 
91 
Кроме того, применение запроса ForEach оправдано, если надо выпол-
нить некоторое простое действие для всех элементов последовательности, 
созданной «на лету» и поэтому не имеющей имени. 
Полезной особенностью запроса ForEach, отсутствующей у одноимен-
ного цикла, является возможность использования в лямбда-выражении до-
полнительного параметра — индекса обрабатываемого элемента. 
Запросы Print и Println не требуют дополнительных пояснений: они ис-
пользуются в нашей книге, начиная с п. 3.2, для вывода последовательно-
стей на экран. Мы называли их методами массивов и последовательно-
стей, чтобы подчеркнуть, что они, в отличие от одноименных процедур
требуют применения точечной нотации, однако фактически они являются 
запросами последовательностей, что позволяет использовать их для любых 
коллекций.
Обратите внимание на особенность этих запросов, которая раньше не 
упоминалась: они не только обеспечивают вывод элементов последова-
тельности на экран, но и возвращают эту последовательность, поэтому по-
сле вызова запроса Print или Println цепочку запросов можно продолжить. 
Это превращает запросы Print/Println в удобное средство отладки (аналогич-
ное отладочному запросу Show, реализованному в задачнике Programming 
Taskbook, — см. его описание в п. 4.2).
В качестве примера можно обратиться к фрагменту, демонстрирую-
щему действия для получения непересекающихся пар элементов исходной 
последовательности (этот пример приводился в п. 4.5 при описании запро-
са Pairwise): 
var a := Seq(10, 29, 33, 84, 40, 59, 52, 53); 
Writeln(a.Pairwise.Slice(0, 2));
Заменим процедуру Writeln на несколько запросов Println: 
a.Println.Pairwise.Println.Slice(0, 2).Println;
В результате мы получим на экране «снимки» последовательности на 
каждом этапе ее преобразования: 

Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   52   53   54   55   56   57   58   59   ...   71




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling