NETSquirrel - вопросы и ответы


#82

Мы думали над этим - решения не было. Но мы выбирали между “Переименовывать только в этом модуле” и “Не переименовывать даже в этом модуле если это имя из другого модуля”. Проблема же еще и в том, что если переименуешь, то назад вернуться уже нельзя.


#83

NETSquirrel - идейное продолжение и обобщение PABCSystem на всю платформу NET. В данной теме будут обсуждаться вопросы, связанные напрямую с данной библиотекой. Решения будут выкладываться, очевидно, на языке PascalABC.NET.

Introdution.pptx (1014.4 KB) The library usage in PascalABC.NET.pptx (1.3 MB)

Обучающие презентации также доступны и на официальном сайте проекта. Основной упор сделан на поддержку англоязычной аудитории, хотя и от русскоязычной не отказываюсь.

Скачать библиотеку можно по данной ссылке.

Как создавать вопросы?

Убедительная просьба, перед заданием вопроса:

  • Убедитесь, что подобный вопрос ещё не задавался, осуществив поиск по данной теме.
  • Если поиск не дал результатов, попытайтесь поискать соответствующие примеры либо здесь, либо среди проектов в скачанном репозитории библиотеки.
Модули

Использование модулей вне PascalABC.NET не рекомендуется.

Содержание
  1. Сравнение NETSquirrel и PABCSystem
  2. Методы расширения базовых типов
  3. Методы расширения последовательностей
  4. Методы расширения IList
  5. Методы расширения для матриц
  6. Утилитные методы для базовых типов
  7. Утилитные методы для создания массивов
  8. Утилитные методы для создания матриц

При желании писать на MrFresnel@yandex.ru убедительная просьба в заголовок сообщения включать название библиотеки, это позволяет фильтровать автоматически письма, связанные с библиотекой, в отдельную папку.


#84

В топике сказано: " - вопросы и ответы". Посему вопрос: А что все это дает? Или, иначе, для чего простому русскому программисту эта библиотека? Ведь у всего есть цена, не так ли? Какую цену заплатит пользователь и что он взамен получит? Ну, кроме картинки с белочкой?

А еще, почему упор именно на англоязычную аудиторию? Они умнее? Тупее? Или это просто попытка высунуться на рынке зарубежного софта?


#85

Хороший вопрос. Сама идея создать библиотеку пошла из PABCSystem. Всё началось с желания “расширить” её функционал, не привлекая к этому делу разработчиков (у них и так забот хватает) и не модифицируя код самого модуля, чтобы этим функционалом удобно было пользоваться на многих .NET языках. (Проблема использования PABCSystem и других модулей PascalABC.NET на других .NET языках в том, что при этом видны ненужные детали реализации). Так что ответ такой: библиотека даёт аналогичные модулю PABCSystem возможности. Только вдобавок: добавляет свои (интерфейсы, прокси-типы). Пока в PABCSystem есть то, чего нет в моей библиотеки и на данный момент нельзя сказать, что она перекрывает функционал системного модуля, скорее дополняет. И в любом случае библиотека не соответствует стилю PascalABC.NET в том смысле, что в ней нет здесь принятых коротких методов. Поэтому я думаю, что в аспекте краткости библиотека проигрывает у PABCSystem.

Библиотека бесплатная. Если имеется ввиду другая цена, то, если я верно Вас понял, ценой будет +1 зависимость от библиотеки.

Я сейчас активно практикую английский язык. Упор на английскую аудиторию - это стимул мне как разработчику повышать навыки владения английском языком, чтобы свободно общаться с пользователями. Сами знаете, что много информации на английском, что значит, что это пойдёт мне на пользу.


#86

В данном случае “цена” - это усилия, которые будут затрачены на освоение и преодоление возможных багов. Интересует, насколько это будет уравновешено преимуществами от использования библиотеки.

Тут сложно не согласиться: отличный стимул. Вот только это еще и стимул для неанглоязычной аудитории держаться от такой затеи подальше. Не думали на этот счет? Обычно все же отечественные разработчики заботятся и о русском языке. Я представляю, насколько сократилось бы число пользователей того же PascalАВС.NЕТ, если исключить из Справки и сообщений русский язык…


#87

Я постарался структурировать библиотеку так, чтобы не было нужды запоминать все методы и классы в ней. То есть, чтобы требовалось запомнить лишь принципы ее построения и дальше её использование не представляло бы труда. На счёт багов - они есть в любом среднем или большом проекте (может, даже в маленьком, но вероятность ниже). Я стараюсь тестировать библиотеку, особенно перед выпуском нового релиза. Но, следить за каждой мелочью в таком большом объеме кода сложно. Исправлять ошибки - однозначно буду. На счёт уравновешено - смотря какие у Вас цели. Если Вам нужны возможности, подобные PABCSystem - полагаю, что перевешивать будут преимущества библиотеки, нежели количество ошибок в ней. :slight_smile:

Вы правы. Со временем постараюсь сделать и русскоязычные версии презентаций и остального материала для этой библиотеки. Как раз к выпуску релиза.


#88

Введение.pptx (1016.4 KB) Использование библиотеки в PascalABC.NET.pptx (1.3 MB)

Выложил две презентации на русском языке, описывающие библиотеку, также и здесь. Есть предложения по их улучшению?


#89

По этой ссылке доступны две презентации, которые на самом деле одна и та же, причем кадр №9 показывает два наложенных друг на друга фрейма и непонятно, о чем он.


#90

Исправлено.

Согласен с тем, что при предварительном просмотре презентации это трудно понять. Вот как он выглядит при просмотре презентации (запускал из PowerPoint):

Был выбор между: выделить отдельный слайд под большой по сравнению с нижним код или сделать кнопку, по нажатию на которую появлялся бы полный код. Разумеется, можно сделать упрощённые презентации, чтобы не было проблем при отображении в таких сервисах как Google.


#91

Расширения для базовых типов (NETSquirrel / PABCSystem):

  1. 1.IsBetween(0, 3) = 1.InRange(0, 3)
  2. 0.To(10) = 0.To(10)
  3. 10.DownTo(0) = 10.DownTo(0)
  4. 9.ToThis() = 10.Times() Отличие: ToThis генерирует последовательность от первого до последнего числа включительно, в отличиии от Times, в котором последнее число не включается в последовательность.
  5. 0.Stepped(2) = 0.Step(2)
  6. 0.Print() = 0.Print()
  7. 0.PrintLine() = 0.Println()
  8. int64(0).Print() = int64(0).Print()
  9. int64(0).PrintLine() = int64(0).Println()
  10. 0.2.Print() = 0.2.Print()
  11. 0.2.PrintLine() = 0.2.Println()
  12. 'a'.Print() = 'a'.Print()
  13. 'a'.PrintLine() = 'a'.Println()
  14. true.Print() = true.Print()
  15. true.PrintLine() = true.Println()

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

Перейти к содержанию


#92

Будут .ToWords, .JoinIntoString?


#93

Расширения для последовательностей (NETSquirrel / PABCSystem):

  1. Seq(4, 9).Numerate() = Seq(4, 9).Numerate()
  2. Seq(4, 9).OrderBy() = Seq(4, 9).Sorted()
  3. Seq(4, 9).OrderByDescending() = Seq(4, 9).SortedDescending()
  4. Seq(3, 2).MinBy(x -> 10 - x) = Seq(3, 2).MinBy(x -> 10 - x)
  5. Seq(3, 2).MaxBy(x -> 10 - x) = Seq(3, 2).MaxBy(x -> 10 - x)
  6. Seq(3, 2).Cartesian(Seq(1, 4)) = Seq(3, 2).Cartesian(Seq(1, 4))
  7. Arr(4, 9).Shuffle() = Arr(4, 9).Shuffle()
  8. Seq(4, 9).Print(', ') = Seq(4, 9).Print(', ')
  9. Seq(4, 9).PrintLine(', ') = Seq(4, 9).Println(', ')

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

Перейти к содержанию


#94

В NETSquirrel - да. Только, возможно, с другими именами. Но, об этом будет сказано в постах сравнения NETSquirrel и PABCSystem.


#95

Пусть, мы имеем следующий массив:

var x := 1.To(10).ToArray();

Расширения для IList<T> (NETSquirrel / PABCSystem):

  1. x.Slice((0, 9, 2)) = x.Slice(0, 2, 5) Отличие: в NETSquirrel срез задаётся через диапазон и шаг прохода по нему; в PABCSystem - через первый индекс диапазона, шаг и количество элементов среза.

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

Перейти к содержанию


#96

Пусть, мы имеем следующую матрицу:

var x := MatrGen(10, 10, (i, j) -> (i, j));

Расширения для матриц (NETSquirrel / PABCSystem):

  1. x.GetColumn(1) = x.Col(1)
  2. x.GetRow(1) = x.Row(1)
  3. x.SwapColumns(0, 1) = x.SwapCols(0, 1)
  4. x.SwapRows(0, 1) = x.SwapRows(0, 1)
  5. x.PrintAsMatrix() = x.Println(6) Отличие: PrintAsMatrix автоматически выравнивает элементы матрицы по столбцам, в то время как, Println использует указанную ширину столбца.

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

Перейти к содержанию


#97

Утилитные методы для создания массивов (NETSquirrel / PABCSystem):

  1. ArraysUtils.GenerateArray(10, i -> i, 1) = ArrGen(10, i -> i, 1)
  2. ArraysUtils.GenerateArray(10, 1, x -> x + 2) = ArrGen(10, 1, x -> x + 2)
  3. ArraysUtils.CreateRandomIntArray(10, 0, 10) = ArrRandomInteger(10, 0, 10)
  4. ArraysUtils.CreateRandomFloatArray(10, 0, 5.5) = ArrRandomReal(10, 0, 5.5)
  5. ArraysUtils.CreateFilledArray(10, 2) = ArrFill(10, 2)
  6. ArraysUtils.ReadIntArray(10) = ReadArrInteger(10)
  7. ArraysUtils.ReadDoubleArray(10) = ReadArrReal(10)
  8. ArraysUtils.ReadStringArray(10) = ReadArrString(10)

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

Перейти к содержанию


#98

Утилитные методы для базовых типов (NETSquirrel / PABCSystem):

  1. BaseTypesUtils.Swap(x, y) = Swap(x, y)
  2. BaseTypesUtils.ReadBool('Enter:') = ReadBoolean('Enter:')
  3. BaseTypesUtils.ReadInt('Enter:') = ReadInteger('Enter:')
  4. BaseTypesUtils.ReadDouble('Enter:') = ReadReal('Enter:')
  5. BaseTypesUtils.ReadChar('Enter:') = ReadChar('Enter:')
  6. BaseTypesUtils.ReadString('Enter:') = ReadString('Enter:')

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

Перейти к содержанию


#99

Утилитные методы для создания матриц (NETSquirrel / PABCSystem):

  1. MatricesUtils.GenerateMatrix(10, 10, (i, j) -> (i, j)) = ArrGen(10, 10, (i, j) -> (i, j))
  2. MatricesUtils.CreateRandomIntMatrix(10, 10, 0, 10) = MatrRandomInteger(10, 10, 0, 10)
  3. MatricesUtils.CreateRandomFloatMatrix(10, 10, 0, 5.5) = MatrRandomReal(10, 10, 0, 5.5)
  4. MatricesUtils.CreateFilledMatrix(10, 10, 2) = MatrFill(10, 10, 2)
  5. MatricesUtils.ReadIntMatrix(10, 10) = ReadMatrInteger(10, 10)
  6. MatricesUtils.ReadDoubleMatrix(10, 10) = ReadMatrReal(10, 10)

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

Перейти к содержанию


#100

ValueTuplesExtensions.pas (2.2 KB)

Модуль-обёртка, расширяющий функционал для размерных кортежей. Пример использования:

{$reference NETMouse for NET.dll}
uses ValueTuplesExtensions;

begin
  (VRec(1, 2) + 3).Print(); // (1, 2, 3)
end.

Адаптирован под стиль модуля PABCSystem.

Перейти к содержанию


#102

Может размерных?))