Замечания и предложения


#1367

А если это будущий модуль или библиотека? А если я планирую текст сохранить с расширением .cs ? Есть такое понятие - “навязчивый сервис”. Не хотелось бы вспоминать о нем в среде PascalABC.NЕТ.


#1368

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

Так как декларация теперь свободная и в произвольном месте, важно иметь в виду именно объявления переменных, например, выделенных подчёркиванием. Или же как вкладка со списком инициализации и возможностью перейти к конкретной строке в тексте, но так чуть сложнее.


#1369
Слушайте, что я накропал вчера ночью при колеблющемся свете электрической лампы:
«Я помню чудное мгновенье, передо мной явилась ты, как мимолетное виденье,
как гений чистой красоты». Правда, хорошо? Талантливо? И только на рассвете,
когда дописаны были последние строки, я вспомнил, что этот стих уже написал
А. Пушкин.
                                          И.Ильф, Е.Петров. "Золотой теленок"

А можно узнать - зачем? Переменная объявляется непосредственно перед или при своем первом использовании. А дальше достаточно навести на нее курсор - и Intellisence все про нее расскажет. Зачем вместо этого выделять куски текста? Мало других выделений, хочется, чтобы вообще в глазах все запестрело? Представьте книгу, в которой множество выделений - гарнитурой шрифта, подчеркиваниями, размером, обводками, … да я бы чокнулся от такого чтения! А Вы - нет?


#1370

var уже выделяется жирным… Но всё же, зачем там вообще какое то выделение/список переменных?


#1371

Александр, может лично у Вас иначе, но обычно в библиотеки выносят необходимые и часто повторяемые процедуры и функции (и реже типы и константы), что на практике явно чаще 1:1000 в пользу обычных программ, где можна по памяти или с заготовки вставить нужное и сразу проверить или получить результат.

Что касается объявлений, кроме var ещё много ключевых слов, от которых у некоторых может рябить текст, поэтому разбирая старый или чужой код я часто распечатываю и выделяю подчёркиванием объявления, чтобы легче ориентироваться.

Ну, что же, просто старая привычка и, видимо, мало кому ещё интересно или полезно. Вопрос снят.


#1372

Только у вас (и вообще не правда, ибо в библиотеках на самом деле нет ничего кроме типов). И вообще это плохо. Если уже делаете библиотеку работающую только с типами из других библиотек, не создающую ничего своего, даже враперов… Надо, по крайней мере, позапихивать эти подпрограммы в статичные классы. А то мусорка доисторического стиля получается.


#1373

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


#1374

Я пишу такие книги. К счастью, их никто не читает. Тогда откуда берутся чокнутые?


#1375

Значит, все же читают! :rofl::stuck_out_tongue_winking_eye:


#1376
Summary

Если Вы - Валерий Рубанцев, особенность ваших книг в том, что в каждой серии рассмотрены аналогичные задания на различных языках, с учётом специфики. У нас в школе была ксерокопия книги или методички, где задачи были параллельно на Бейсике, Паскале, Си, и вроде бы Фортране, а уместное сравнение всегда полезно и познавательно.


#1377

Александр, Вы правы: в идеале нужно чётко представлять и продумать весь проект используя верный подход и только чистые (“идеальные”) функции и процедуры, которые оперируют лишь параметрами, не учитывая и не изменяя внешние значения и данные.

Summary

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

Я считаю, что фирменная особенность Паскаля в том, что всегда есть “Содержание” - перечень всех констант и переменных, без рыскания по коду. Возможно, это всего лишь устаревший взгляд и даже вредная привычка, так что всё нормально.


#1378

Извините, не понял, о чем это Вы.


#1379

Раздел Const и Var, разумеется. :slightly_smiling_face:

Summary

Часто зная задачу можно лишь по количеству переменных оценить эффективность программы, а по названиями и типам переменных (и процедур / функций) - продвинутость самого автора.


#1380

Видите ли, наличие раздела var в Паскале - это уже глубокая история. Сейчас так не пишут. Еще раз: переменная описывается непосредственно перед или при первом использовании. Именно поэтому описатель var разрешено использовать везде, а не выносить за пределы основной программы. Даже такой язык, как бейсик - и тот давно перешел к концепции описания переменных по мере их использования.

Это что-то запредельное, для людей с экстрасенсорными способностями.


Болталка PascalABC.NET
#1381

Я так пишу от лени.


#1382

Круто! Я вот от лени вообще никак не пишу.


#1383

У Вас просто ранняя стадия лени. На более взрослых стадиях становится лень лениться, и тогда начинаешь лениво писать книги. От ленивой лени обычно получаются интересные книги, которые самому не лень почитать.


#1384

Вообще программируют всё от лени делать всё руками


#1385

В конце-концов, неприлично делать самому то, что можно поручить другому. Даже если этот другой - компьютер.


#1386

Как насчёт добавить такую функцию в PABCSystem?:

function Distinct<T1,T2>(self: sequence of T1; selector: T1->T2): sequence of T1; extensionmethod;
begin
  var prev := new HashSet<T2>;
  foreach var a in self do
    if prev.Add(selector(a)) then
      yield a;
end;

Необходимость такая же, как у .MaxBy, то есть возможность получить результат, исходя из проекции элементов, вместо самих элементов.

Стандартный .Net-овский .Distinct выглядит примерно так же (это перевод на паскаль, но оригинальный работает точно так же):

function Distinct<T>(self: sequence of T): sequence of T; extensionmethod;
begin
  var prev := new HashSet<T>;
  foreach var a in self do
    if prev.Add(a) then
      yield a;
end;