Согласен с тем, что при предварительном просмотре презентации это трудно понять. Вот как он выглядит при просмотре презентации (запускал из PowerPoint):
Был выбор между: выделить отдельный слайд под большой по сравнению с нижним код или сделать кнопку, по нажатию на которую появлялся бы полный код. Разумеется, можно сделать упрощённые презентации, чтобы не было проблем при отображении в таких сервисах как Google.
Расширения для базовых типов (NETSquirrel / PABCSystem):
1.IsBetween(0, 3) = 1.InRange(0, 3)
0.To(10) = 0.To(10)
10.DownTo(0) = 10.DownTo(0)
9.ToThis() = 10.Times()Отличие: ToThis генерирует последовательность от первого до последнего числа включительно, в отличиии от Times, в котором последнее число не включается в последовательность.
0.Stepped(2) = 0.Step(2)
0.Print() = 0.Print()
0.PrintLine() = 0.Println()
int64(0).Print() = int64(0).Print()
int64(0).PrintLine() = int64(0).Println()
0.2.Print() = 0.2.Print()
0.2.PrintLine() = 0.2.Println()
'a'.Print() = 'a'.Print()
'a'.PrintLine() = 'a'.Println()
true.Print() = true.Print()
true.PrintLine() = true.Println()
Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.
Расширения для IList<T> (NETSquirrel / PABCSystem):
x.Slice((0, 9, 2)) = x.Slice(0, 2, 5)Отличие: в NETSquirrel срез задаётся через диапазон и шаг прохода по нему; в PABCSystem - через первый индекс диапазона, шаг и количество элементов среза.
Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.
x.PrintAsMatrix() = x.Println(6)Отличие: PrintAsMatrix автоматически выравнивает элементы матрицы по столбцам, в то время как, Println использует указанную ширину столбца.
Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.
Полагаю, существенно интереснее увидеть отличия от PascalABC.NЕТ, потому что именно они позволят судить о смысле использования этой библиотеки. Потому что схожесть - а зачем она? Если это библиотека, зачем в ней дублировать то, что уже есть, только с другими именами? Чтобы объем языка вдвое расширить?
Невозможно с этим не согласиться. Можно будет сделать отдельные посты, посвящённые этому. Только, следует провести сравнение в обе стороны: чтобы показать плюсы и минусы как и библиотеки, так и PABCSystem. Так, по крайней мере, будет справедливо.
Главная идея, заложенная в библиотеку - расширить привычный функционал модуля PABCSystem (точнее, его часть, поскольку PABCSystem также занимается системными задачами) до уровня всей платформы .NET. NETSquirrel - продолжение начатого разработчиками PascalABC.NET модуля со своими добавлениями. Это позволит обеспечить наиболее безболезненный переход с PascalABC.NET на C# или другие .NET языки или в обратном направлении. Новое, что внесла библиотека - это:
Множество интерфейсов, для написания коллекций и их immutable версий.
Новые утилитные методы, например, для чтения кортежей, массивов и матриц с возможностью одновременной обработки ошибок при неверном вводе.
Методы расширения для вывода и изменения кортежей, массивов, матриц и последовательностей.
Библиотека широко использует паттерн null-object, при реализации которого при неверных входных данных не бросается исключение, а возвращается объект-пустышка указанного типа.
Прокси-типы, которые позволяют указать как программист хочет чтобы пользователь видел некоторую коллекцию в отладчике Visual Studio или Rider.
Пример программы к пункту 2:
{$reference NETMouse for NET.dll}
uses NETMouse.Utils;
uses NETMouse.Extensions;
begin
TuplesUtils.ReadBoolTuple3(ex -> ex.Message.PrintLine(), 'Введите {0}-ый элемент:')
.PrintLine();
end.
Программа при неверном вводе покажет текст сообщения исключения ex. Формат подсказки можно не указывать, в этом случае её формат будет следующий: 'item {0}:'.
Использование методов, подобных PrintSeparatorLine, позволяет нам не заводить лишних переменных. Стоит также заметить, что последний использованный разделитель запоминается и при использовании вместо нового разделителя null выводится запомненный.
Выкладываю отдельным постом, поскольку предыдущий пост пока не могу отредактировать.
Пример (2) программы к пункту 3:
{$reference NETMouse for NET.dll}
uses NETMouse.Utils;
uses NETMouse.Extensions;
begin
'Матрица, прочитанная по столбцам:'.PrintLine();
MatricesUtils.ReadIntMatrix(2, 2, false).PrintAsMatrix();
end.
Для чтение матрицы по строкам можно: либо опустить явное значение третьего параметра, либо явно указать вместо него true. Есть идея сделать чтение матрицы в произвольном порядке: следующий читаемый элемент (точнее, его пара индексов) будет определять некоторая функция.