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


#230

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


#231

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

Да, именно так. Но, бывают случаи-исключения. Например, просто требуется создать два массива, читаемых с клавиатуры. Дублировать параметры - не хочется, писать лишние константы - тоже, хочется иметь возможность быстро сгруппировать единожды некие параметры для метода в какой-то простой объект, а затем иметь возможность их переиспользовать. Разумеется, встаёт вопрос о том, что магические числа всё равно используются, хоть и реже, при данном подходе. Возможно, при неверном использовании такого функционала код можно испоганить - будет слишком много магических чисел. Однако, неверно использовать можно всё, что угодно… Неплохим решением будет составить рекомендации по использованию всего функционала библиотеки, чтобы пользователи знали каких правил придерживаться, но в то же время, они не навязывались, да и поскольку, как Вы когда-то здесь сказали в отношении PascalABC.NET - рекомендации могут быть, но стандарт нет - слишком много “мороки” (это работает в и отношении NETSquirrel - как open-source проекта).


#232

Вот тут я не совсем понял. Если массив читается с клавиатуры - причем тут параметры? Если речь о размерах массива - ну хорошо два массива, что, так сложно сдублировать строку с кодом для второго из них? Это быстрее, чем набрать строку вызова метода. Т.е. можно, конечно, придумать вымороченный пример, где это будет полезно, но стоит ли ради таких случаев городить огород?


#233

Дело в том, что в параметрах указывается не только размер, но можно также указать обработчик ошибки, если, например, во время чтения массива чисел будет введена строка и формат подсказки для ввода каждого элемента.


#234

Ну так и? Вот и скопируйте всю строку.


#235

Я тоже задумывался над таким вопросом. С одной стороны - хотелось бы иметь запас функционала, с другой - это всё-же лишняя поддержка, в то время как силы могут потрачены на иные более полезные вещи. В общем, пока это всё на стадии размышлений, но полезность - сомнительная… Также есть мысль следующая: NETSquirrel не гонится за краткостью, так, как это делает PABCSystem - по названиям методов и классов - заметно, точнее - снова вопрос: Стоит ли реализовывать данный функционал, ради краткости? Именно поэтому, я спрашивал также и @Admin, поскольку он - преподаватель и ему известны потребности учащихся, на которых, возможно, была бы ориентирована данная фишка библиотеки.


#236

Поступило предложение сделать методы расширения для матриц и jagged-массивов (array of array of T):

  • T[,] ToMatrix<T>(this T[][] array) и TOutput[,] ToMatrix<T, TOutput>(this T[][] array, Func<T, TOutput>)
  • T[][] ToJagged<T>(this T[,] matrix) и TOutput[][] ToJagged<T, TOutput>(this T[,] matrix, Func<T, TOutput>)
  • T[,] Transpose<T>(this T[,] matrix) и TOutput[,] Transpose<T, TOutput>(this T[,] matrix, Func<T, TOutput>)

Лично я думаю над внедрением ещё:

  • SelectManyAsMatrix

У кого и какие есть ещё предложения (@Admin, @ibond, @RAlex, @Sun_Serega, @Kotov, @Valery)?


#237

Обновил шаблон кода NETSquirrel для PascalABC.NET:

{$reference NETSquirrel.dll}

{$define DataStructures}
{$define Debug}
{$define Extensions}
{$define Utils}
{$define PascalABCNETUnits}

{$region NETSquirrel namespaces}
uses NETSquirrel;

{$ifdef DataStructures}
uses NETSquirrel.DataStructures;
uses NETSquirrel.DataStructures.Generic;
uses NETSquirrel.DataStructures.Immutable;
uses NETSquirrel.DataStructures.Generic.Immutable;
{$endif}

{$ifdef Debug}
uses NETSquirrel.Debug;
uses NETSquirrel.Debug.Generic;
{$endif}

{$ifdef Extensions}
uses NETSquirrel.Extensions;
uses NETSquirrel.Extensions.ConsoleSpecific;
{$endif}

{$ifdef Utils}
uses NETSquirrel.Utils;
{$endif}
{$endregion}
{$region Pascal Units}
{$ifdef PascalABCNETUnits}
uses GeneralExtensions;
uses TuplesExtensions;
uses NumericsExtensions;
{$endif}
{$endregion}

begin
  // code here
end.

Теперь можно подключать несколько пространств имён сразу посредством использования {$define ...}.

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


#238

Набор сниппетов для PascalABC.NET, адаптированный под NETSquirrel. Список:

  • block
  • region
  • if, ifelse
  • loop, for, forr, while, repeat
  • foreach
  • procedure, function
  • lock
  • trye, tryf
  • class, record, interface
  • library, unit
  • prop, propg, props, aprop
  • netsquirrel
  • ComparerOf, EqualityComparerOf, ArrayOf, DictionaryOf, HashSetOf, KeyValuePairOf, LinkedListOf, LinkedListNodeOf, ListOf, SortedDictionaryOf, SortedListOf, SortedSetOf, QueueOf, StackOf [для GeneralExtensions]
  • ValueTupleOf [для TuplesExtensions]
  • ReadComplex, ReadVector2, ReadVector3, ReadVector4, ReadMatrix3x2, ReadMatrix4x4 [для NumericsExtensions]
  • сниппеты для пространства имён NETSquirrel.Utils, представляющие собой имена соответствующих методов (пример: GenerateArray)

Вначале располагаются общие сниппеты, после - для расширений NETSquirrel на PascalABC.NET, последние - для оригинальной NETSquirrel.

template.pct (7.4 KB)

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


#239

Создан репозиторий для сниппетов PascalABC.NET.


#240

Обновлён пакет сниппетов для PascalABC.NET до версии v0.0.17.2-6. Добавлены сниппеты:

  • для методов класса NETSquirrel.Extensions.ObjectExtensions
  • для всех директив компилятора
  • для методов класса NETSquirrel.Extensions.BaseTypesExtensions
  • для методов класса NETSquirrel.Extensions.TuplesExtensions
  • для автоклассов - aclass

Скачать PascalABC.NET Snippets v0.0.17.2-6

Пример использования:

  1. Набор ifdefelse.
  2. Нажатие Shift+Space.
  3. Результат:
{$ifdef |}

{$else}

{$endif}

| - текущая позиция курсора.

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


#241

Как заменить стандартный набор сниппетов на сторонний?

  1. Откройте GitHub.
  2. Скачайте в разделе Releases нужную Вам версию пакета сниппетов NETSquirrel.
  3. Переместите скачанный .pct файл в директорию C:\Program Files (x86)\PascalABC.NETC:\Program Files (x86)\PascalABC.NET, заменив стандартный template.pct при этом.

Как создать собственный набор сниппетов?

  1. Создайте файл с названием template.txt.
  2. Смените расширение файла на .pct.
  3. Откройте файл и вставьте следующий шаблон:
[SnippetName]
code

SnippetName - имя сниппета, которое потребуется набрать в IDE PascalABC.NET (регистр не важен) для вставки ниже написанного кода, подписанного как code.

  1. Укажите позицию курсора, в которую он переместится (в пределах кода сниппета) после его вставки в IDE посредством |.
  2. После наполнения файла template.pct, созданного Вами, желаемыми сниппетами замените стандартный одноимённый файл в директории C:\Program Files (x86)\PascalABC.NETC:\Program Files (x86)\PascalABC.NET.
  • Для редактирования изначального template.pct требуется запуск текстового редактора с правами администратора.

  • Во всех случаях для проверки внесённых изменений требуется перезапуск IDE.

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


#242

Количество голосов: 181, средняя оценка: 4.98. Просмотров: 32792. Самая высокая оценка на всё время на данный момент.

Как для разработчика, для меня это - приятная новость. Поэтому, в планах:

  • доделать сниппеты для PascalABC.NET и сделать аналогичные для Visual Studio
  • сделать библиотеку-ответвление проекта GraphicsABC - более простой аналог GraphABC, и для любого NET языка
  • сделать библиотеку-ответвление проекта ObjectsABC - более простой аналог ABCOObjects, и для любого NET языка

#243

Обновлён пакет сниппетов для PascalABC.NET до версии v0.0.17.2-10. Добавлены сниппеты:

  • case, match
  • indexer, indexerg, indexers
  • для методов-расширения класса NETSquirrel.Extensions.MatricesExtensions
  • для методов-расширения класса NETSquirrel.Extensions.IEnumerableExtensions

Скачать PascalABC.NET Snippets v0.0.17.2-10

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


#244

Требуется узнать в каком формате лучше предоставлять сниппеты:

[if] 
if | then 
begin 

end; 

[case] 
case | of 
: ; 
else 
end; 

[for] 
for var i := 0 to | do 
begin 

end;

или:

[if] 
if |{condition} then 
begin 
  {statements}
end; 

[case] 
case |{variable} of 
  {values set}: {statements}; 
  else {statements}
end; 

[for] 
for var i := 0 to |{high border} do 
begin 
  {statements}
end;

Первый вариант - меньше править при заполнении сниппета конкретными значениями, но также и меньше его информативность. Второй - больше править при заполнении сниппета, но также и больше информативность.

  • Первый
  • Второй
  • Желаю предложить свой

0 голосов


#245

Весь смысл снипетов - увеличивать скорость написания кода. А что делают конструкции языка должно объясняться в справке, а не где попало. Тем более если человек не понимает что такое case - он точно не поймёт что такое statements. Всё же это сложный термин, ещё и на англ.


#246

Кто голосовал за второй вариант - прошу откликнуться и аргументировать свою точку зрения.


#247

Да аргумент простой: человеческая натура. Чтобы работало без разных там RTFM.


#248

Ну, если делать как в студии, где подсказки сами пропадают - нормально. Но это будет довольно не удобно, если после каждого b+Shift+Space придётся удалять какую то часть кода.

И - скажите ка какой у вас опыт использования снипетов.


#249

Пока - опыт исключительно отрицательный. Мешают…