PascalABC.NET имеет базовую совместимость с Turbo Pascal, что должно было позволить портировать старые программы с меньшим трудом. Однако, благодаря этому, сложилась тенденция, использовать PascalABC.NET только в стиле Turbo Pascal и игнорировать современные конструкции. Тут я хочу коротко изложить основные отличия и показать правильное использование этого диалекта.

Стандартные функции для ввода и вывода

Не самое важное отличие, однако это пригодится нам для дальнейшего сравнения.

В Turbo Pascal для ввода и вывода используются процедуры read[ln] и write[ln] соответственно.

var 
  a, b: integer;
  
begin
  write('a='); 
  readln(a);
  
  write('b='); 
  readln(b);
  
  writeln('сумма ', a, ' и ', b, ' равна ', a+b);
end.

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

write('a='); 
a:= ReadlnInteger;

Аналогичные функции есть для остальных типов (real, string, etc). Более того, эти функции могут выводить приглашение для ввода самостоятельно.

a:= ReadReal('a =');

Для вывода используется подпрограмма Print[ln], которая автоматически разделяет переданные параметры пробелами. Таким образом, можно убрать из команды вывода лишние пробелы.

В результате программа приобретает такой вид:

var 
  a, b: integer;
  
begin
  a:= ReadlnInteger('a =');
  b:= ReadlnInteger('b =');
  
  Println('сумма', a, 'и', b, 'равна', a+b);
end.

Локальные переменные

В Turbo Pascal переменные объявляются перед основной программой или перед телом подпрограммы. Например для решения квадратного уравнения может потребоваться такой набор переменных

var
  a, b, c, d, x1, x2: real; // коэффициенты, дискриминант, корни
  count: integer; // кол-во найденных корней

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

В PascalABC.NET переменные могут объявляться прямо в коде. Делать это нужно как можно ближе к месту первого использования переменной.

Посмотрим на примере программы, складывающей числа.

begin
  var a: integer; // объявляем
  a:= ReadlnInteger('a ='); // инициализируем
  
  var b: integer;
  b:= ReadlnInteger('b =');
  
  println('сумма', a, 'и', b, 'равна', a+b);
end.

Объявление переменной можно совместить с инициализацией.

begin
  var a: integer:= ReadlnInteger('a =');
  var b: integer:= ReadlnInteger('b =');
  
  println('сумма', a, 'и', b, 'равна', a+b);
end.

Более того, компилятор понимает, что мы инициализируем переменную значением типа integer и тип можно не указывать явно. Работает автовыведение типов.

begin
  var a:= ReadlnInteger; // a: integer
  var b:= 24.5;          // b: real
  
  println('сумма', a, 'и', b, 'равна', a+b);
end.

Всё это применимо и к циклу for

for var i:= 0 to 10 do ;

Динамические массивы

В Turbo Pascal используются статические массивы, основная проблема которых -- необходимость указывать размер массива ещё на этапе создания программы. В результате массивы зачастую создаются "с запасом". Вместо этого PascalABC.NET предлагает использовать динамические массивы.

begin
  var n:= ReadLnInteger('Введите размер массива:');
  
  var arr: array of integer;
  arr:= new integer[n];
  
  var arr2:= new integer[n]; // автовывод типа
end.

Такие массивы индексируются с ноля.

Помимо стандартного заполнения массива по индексам существует ряд других методов.

begin
  var x:= 1;
  
  // заполнение известными значениями
  var arr:= |1, 10, 43, x|; 
  
  // чтение 10 значений из консоли
  var arr2:= ReadArrInteger(10);
end.

Свойства и расширения типов

Каждый стандартный тип данных имеет достаточно большое количество свойств и методов расширения. Это элементы, доступные по точечной нотации.

Пример для integer

begin
  var x:= 2;
  var f:= x.IsEven;   // чётное ли число
  var f2:= x.Divs(4); // делится ли на 4
  x.Print;            // вывод в консоль
end.

Пример для динамических массивов:

begin
  var arr:= |1, 31, 40, 4, 1|;
  arr.Sort; // сортировка
  var len:= arr.Length; // получение размера
  var max:= arr.Max; // получение максимального
  var count:= arr.CountOf(1); // кол-во указанного элемента
end.

Многие из этих расширений для массивов относятся к LINQ, но это достаточно обширная тема.

Благодаря этому код на PascalABC.NET может выглядеть как цепочка методов. Например эта программа находит количество двоек в записи считанного числа

begin
  ReadlnInteger.ToString.CountOf('2').Print;
end.

Кстати .Print[ln] можно использовать для всех базовых типов. Это особенно удобно в длинных выражениях.

Кортежи

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

begin
  var point: (integer, integer);
  point:= (1, 2);
  
  print(point.Item1, point.Item2);
end.

В стандартной библиотеке есть функции, считывающие из консоли несколько значений сразу и возвращающих кортеж

begin
  var point1:= ReadInteger2;
  print(point1.Item1, point1.Item2);
  
  var point2:= ReadReal2;
  print(point2.Item1, point2.Item2);
end.

Кортеж можно распаковать в отдельные переменные

begin
  var point:= (1, 4, 2);
  
  var x, y, z: integer;
  
  (x, y, z):= point;
  
  Print(y); // 4
end.

И наконец, объявление переменных можно совместить с распаковкой

begin
  var point:= (1, 4, 2);
    
  var (x, y, z):= point;
  
  Print(y); // 4
end.

Заключение

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

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

Пишите современный код!

Комментарии (39)


  1. LordDarklight
    28.12.2023 11:04

    Когда-то был Delphi.NET и Prism Oxygene  - но всё это быстро померло - ибо нахрен никому оказалось не нужно. Хотя у меня книжка Delphi.NET Ксавье Пачеко (отличная книга) до сих пор лежит на столе (правда в виде подставки для монитора) - тогда много возникало .NET редакций разные ЯП - сейчас, по сути они все мертвы - выжил только оригинал C# - и я, считаю, что это печально! C# слишком много унаследовал от C++ того, что мне не нравится - но C# хороший ЯП, хоть в последнее время не всем нравилось как бурно он развивался! Но отсутствие в среде .NET у него конкурентов - это не хорошо, как я считаю - слишком уж монополизированной получается разработка под .NET - в целом, очень хорошей платформы!

    Вот у JVM есть некоторые альтернативы в лице Scala, Kotlin и некоторых менее известных ЯП. И это хорошо.

    Когда сдох Delphi.NET я очень грустил, и хотел делать уже свою версию - но потом понял, что это тоже будет труп. Хотя для обучения программированию в школах Pascal на платформе .NET был бы не плох. Но.... есть же Python - вроде бы ещё лучше для школьников (которые переходят с более "примитивных" графических ЯП для детей). Так что в чём потребность в PascalABC.NET мне не ясна вовсе. Особенно когда есть Kotlin с похожим и более лаконичный синтаксисом (Rust не рассматриваю - это другая область).

    Вот лично я делаю Kotlin для платформы .NET - и считаю, что потребность в таком диалекте может быть не на много ниже чем в Native Kotlin - небольшая, но свою нишу найдёт - выехав на популярности Kotlin и широких возможностях платформы .NET

    А уж если разрабатывать новые ЯП - то это уже должно быть что-то революционное, удобное и надёжное - лучше, чем есть среди основных ЯП TOP10

    Что до текстового ЯП для школьников средних классов - то Pascal, на мой взгляд, тут уже устарел как учебный язык - но действительно хорошей альтернативы ему я не видел - всё-таки даже Python и Kotlin тут больше для старшеклассников и студентов годятся. Но и PascalABC.NET будет для них слишком сложен и коряв, а главное - для младших и средних классов нужна очень красивая и затягивающая мультимедийная оболочка и умная среда разработки - вот об этом нужно думать в первую очередь.

    Ну и тут можно спорить "о первенстве курицы и яйца" (хотя кто знает, тот знает, что яйцо классе пернатых было первым) - но лично моё мнение в нынешних реалиях обучение программированию надо начинать ЯП без строгой типизации - и не грузить детей особенностями устройства памяти - это вполне можно оставить до старших классов или даже до ВУЗов. И без этих знаний можно вполне успешно программировать, а грузить этим мозг детей не гуманно - наоборот лучше потом более серьёзно этому всему обучать, когда мозги уже готовы будут это всё воспринимать с уклоном в оптимизацию!


    1. GospodinKolhoznik
      28.12.2023 11:04
      +1

      А чем Го не альтернатива Паскаля для школьников? Очень похожие языки.


      1. LordDarklight
        28.12.2023 11:04
        +6

        Мерзкий язык - для обучения не годится - хуже чем Python. Простите за резкость - от синтаксиса GoLang меня воротит - но это субъективное мнение - нелаконичный и необтёсанный он. Как минимум я плохо перевариваю ЯП где форматирование текста не имеет свободной формы! И, думаю, детям это тоже будет очень неудобно! Как и путаница в присваиваниях "=" и ":=", а уж проблема проверки на nil - меня вообще выворачивает!


        1. GospodinKolhoznik
          28.12.2023 11:04

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

          А Паскаль отличный язык для обучения - явное определение переменных, строгая типизация, никаких классов и объектов (что для школы плюс, а не минус). Но Паскаль уже почти нигде не используется и странно учить детей умирающему языку, а Го современный и востребованный язык. Поэтому он мне кажется интересным вариантом.

          А так все языки имеют свои недостатки и уродства от которых воротит. Даже не знаю, есть ли язык, который не имеет недостатков в моих глазах? Ну разве что Coq. Вот Coq совершенный идеал, вообще не могу придраться ни к чему! Ну разве что один недостаток - учить детей в школах Coq было бы абсолютным безумием.


          1. SamuraiDev Автор
            28.12.2023 11:04

            никаких классов и объектов

            Ну как же, если только что были описаны некоторые методы расширений и свойства, ещё и LINQ затронут совсем чуть-чуть. И всё это в примитивных типах. Единственное, что на начальных этапах в этом разбираться совсем не обязательно


    1. miksmiks
      28.12.2023 11:04
      +1

      Ну, это мнение конечно. Вы наверное имеете в виду динамическую типизацию.

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


    1. Wan-Derer
      28.12.2023 11:04
      -1

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

      Но, наверно, придётся разработать какую-то особую школьную IDE.


      1. LordDarklight
        28.12.2023 11:04
        -1

        Kotlin лучше продуман, чем JavaScript, у которого тоже косяки в дизайне есть, и его сложно изучать в отрыве от других технологий. И с практической стороны далее Kotlin более универсален - т.к. компилируется в разные платформы. Но я, всё-таки, считаю Kotlin сложноватым для обучения в школе (разве что в старших классах, если школьники уже освоили более простой ЯП, а вот какой - это ещё та дилемма - тут лучше применять ЯП без строгой типизации - но это лишь моё мнение; и без кучи неочевидных нюансов синтаксиса и выполнения кода).

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

        В своё время для этой цели Turbo pascal как и Basic были хороши - но те время уже прошли - и сейчас нужно искать более удачное решение - даже Python сейчаc лучше подойдёт чем эти старички или JavaScript. Но и Python не без недостатков :-(

        Кстати в старших школьных классах на Kotlin, C#, Python, Lua - можно даже попытаться проводить обучение в игровой форме (в более младших классах тоже можно так - но на других ЯП и платформах) - т.е. заинтересовать детей разработкой или доработкой игр на каких-то готовых игровых движках (сам эти увлекался, правда уже в студенческие годы, хотя и сейчас не брезгую иногда поковырять игровые алгоритмы). Конечно, навряд ли в рамках школьной программы - но на факультативных занятиях можно. В рамках школьной программы я бы всё-таки в старших классах давал бы основы работы с СУБД - т.е. в первую очередь ANSI SQL (он не такой уж сложный в своё базисе) и, с учётом того, что какое-то программирование уже должно к старших классам уже быть освоено - написание визуальных программ для СУБД - ну вот так мне преподавали в старших классах информатику, и так я уже сам успел немного преподавать информатику в старших классах - так что я знаю о чём говорю! В ходу тогда был Delphi - и его визуальная компонентная база была очень легка в использовании! Но сейчас я бы Delphi уже не стал рекомендовать - мир изменился и в ходу уже другие подходы в разработке приложений, но не скажу, что этот процесс стал проще (хотя и усложнился не сильно если изучать с нуля, но вот переучиваться со старых подходов тяжеловато) - уверен, что в будущем это всё снова изменится и упростится ещё сильнее, чем было раньше (но визуальное программирование в том виде уже уйдёт в прошлое)!

        Кроме СУБД в старших классах можно попробовать и в WEB дизайн или вооще во Frontend в целом выстраивать школьную программу. И так делают сейчас - но это опять же, скорее факультатив - слишком сложный стек для школьников, но очень востребованный - но осилят не все. Хотя если сосредоточится на дизайне без (или почти без) программирования - т.е. на только HTML/XAML + стили - то что-то можно делать, вот только без программированию тут далеко не уедешь - а начнёшь тащить программный код - и всё станет слишком сложно для детей! Если что Kotlin'овский Jetpack Compose - тоже сложная штука для школы.


    1. SamuraiDev Автор
      28.12.2023 11:04
      +1

      Вопросы образования меня мало волнуют, так что отвечу только по поводу ниши PascalABC.NET в экосистеме .NET

      Попутно отмечу, что C# не единственный представитель .NET. В последнее время наблюдаю рост популярности F# например. В энтерпрайз его тащат не часто, но опенсорс и какие-то локальные вещи на нём вполне себе живы

      1. И так, PascalABC.NET(pabc) для меня это в первую очередь инструмент, которым очень легко собрать кучу имеющихся в .NET библиотек (как стандартных, так и внешних) и собрать какое-то клиентское приложение, будь то CLI тулза или desktop-приложение. Как правило, это получается намного лаконичнее и читабельнее, чем на том же C#. Все компоненты приложения, которые можно вынести в библиотеку и где-то переиспользовать -- лучше писать на C# и подключать к pabc

      2. Система модулей привносит в .NET иной подход к работе с компонентами программы. При чём модуль в ряде случаев тоже можно переиспользовать между проектами и он является неким легковесным аналогом dll

      3. В вопросах генерации CIL pabc иногда разрешает больше, чем C#. Взять те же именованные индексаторы

      4. Мультипарадигменный подход позволяет не перегружать код лишними абстракциями там, где это не требуется. Актуально для скриптовых, тестовых и небольших приложений

      5. Ряд небольших фишек, облегчающих написание кода. Некритично, но довольно неприятно, когда встречаешь их отсутствие в других языках

      Таким образом, pabc в среде .NET это не про объёмные библиотечные проекты, это про легкоподдерживаемые клиентские программы


    1. same_one
      28.12.2023 11:04
      +1

      Есть, например, Оберон, он не устарел.


  1. ShashkovS
    28.12.2023 11:04

    Ох уж эти ценители стюардесс

    Если серьёзно, то когда-то давно ~25 лет назад Pascal был моим вторым языком программирования после года с basiс и каким-то учебником. И тогда мне требовалось полгода, чтобы на Pascal сделать что-то интересное и красивое.
    Может быть, PascalABC и вправду чем-то хорош как учебный язык. Но я как преподаватель не хочу связываться с подобными учебными языками: ученики может и поймут какие-то концепции лучше, но в большинстве своём никогда в своей жизни ни для какой своей потребности им не воспользуются. То есть обучение пройдёт только ради обучения.


    1. Ahuromazdie
      28.12.2023 11:04
      +2

      А Вы уверены что то с чем вы связались сейчас (кстати с чем? может раст?) - завтра будет кому-то нужно?


      1. ShashkovS
        28.12.2023 11:04
        +1

        В моём случае речь о питоне.
        Так что завтра — точно. Через пять лет — не факт, но это и не важно: если 5 лет не пользоваться языком, то всё забудется.
        Ну, то есть одна из моих личных мысленных KPI при обучении программированию: доля школьников, которые в пределах года после обучения смогли решить какую-то свою задачу при помощи программирования.


        1. alan008
          28.12.2023 11:04
          +2

          Ценность Питона слегка преувеличена (в глобальном смысле для мира программирования). Для low-level лучше уж учить C++, а для High Level - Kotlin или C#.


          1. ShashkovS
            28.12.2023 11:04
            +1

            У питона, безусловно, есть свои проблемы.
            Но в смысле универсального доступа к "достижениям человечества" у питона немного альтернатив. У Kotlin и C# есть свои ниши, не вполне универсальные.

            ИМХО, у обучения C++ как первому языку программирования должна быть какая-то внятная мотивация. Условно, если хочется школьником взять всеросс по информатике, то от C++ не уйдёшь. Плюсы — сложный язык с очень сложным взаимодействием с библиотеками.


            1. alan008
              28.12.2023 11:04

              Согласен со всем написанным.


        1. vadimr
          28.12.2023 11:04
          +1

          Я думаю, что для решения своей задачи можно применить любой известный язык. А в коммерческом программировании любой из современных языков теперешним школьникам, скорее всего, не пригодится. Цель обучения в школе – правильно поставить мозги, а не надеяться на непосредственную применимость материала.

          Питон – неплохой язык для начального обучения, но не надо испытывать слишком много иллюзий.


        1. larasage
          28.12.2023 11:04
          +2

          Ну вот через N лет после окончания ВУЗа (на кафедре основной язык - паскаль=>Delphi) потребовалось "для себя" быстро написать десктоп-программку. Выбрал Lazarus.


    1. SamuraiDev Автор
      28.12.2023 11:04
      +1

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


  1. vadimr
    28.12.2023 11:04
    -2

    Классический и турбо паскаль был хорош для обучения своими маленькими размерами, позволявшими изучить за год язык целиком. А тут уж напихали всякого добра из C++/C# и stdlib, так что объём материала стал очень большой, и тогда непонятно, почему бы сразу не изучить C++.

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


    1. alan008
      28.12.2023 11:04
      +2

      Да не умер он, живёт :) В desktop windows корпоративных приложениях.

      Вот новая версия в ноябре вышла:

      https://www.embarcadero.com/en/products/rad-studio/whats-new-in-12-athens


      1. LordDarklight
        28.12.2023 11:04

        Скорее мёртв чем жив как и VB6 - используется в основном только для поддержки старого ПО.

        А RAD Studio это не только Pascal но и C++ (а от Pascal for .NET они уже давно отказались)

        Но тут всё скорее на компонентную базу завязано, идущую в комплекте со студией (и в первую очередь визуальных для баз данных; ибо тут всё давно устарело - нет никакого WPF, Avalonia UI, Jetpack Compose, Swift UI и вообще с кроссплатформенностью GUI тут всё не очень хорошо - хоть она и официально есть; плохо всё и с кастомизацией GUI )


    1. nik_vr
      28.12.2023 11:04
      +4

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

      Расскажите это Кристиану Гислеру. И авторам других популярных программ, которые до сих пор пишутся на диалектах Паскаля.


      1. vadimr
        28.12.2023 11:04
        -2

        Чего мне рассказывать, я, может, ещё побольше Гислера на паскале написал (ну точно сопоставимо). Но на данный момент это не востребованный рынком навык. Причуда кодировщика. Не первый и не последний основной язык в моей карьере.


    1. miksmiks
      28.12.2023 11:04
      +1

      Интересно, а в каком смысле язык программирования рассматривается как профессиональный язык. Есть много разных профессий, и многие используют программирование. Значит ли, что они делают это непрофессионально?

      Вот допустим - научный работник. Профессионал - очевидно. Написал вычислительную программу на языке программирования. Это - непрофессиональное применение языка?


      1. vadimr
        28.12.2023 11:04
        +2

        Я под профессиональным применением понимаю ориентацию на действующий рынок труда.

        Научный работник ориентирован на рынок труда программистов? Очевидно, нет.

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


    1. miksmiks
      28.12.2023 11:04

      Тут вот какая проблема. Сейчас в качестве учебного языка программирования в школе предлагается как раз язык Питон, напичканный синтаксическим сахаром.

      Еще одна проблема - это то, что многие профессиональные программисты различают только два вида программирования: учебное и профессиональное. А мир гораздо богаче.


      1. vadimr
        28.12.2023 11:04

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

        Я б, например, лисп использовал для обучения, причём лисп-1, где нет разницы между обычным и функциональным значением символа. Но и лого тоже выглядит неплохо, хотя его синтаксис и переусложнён для его семантики.


        1. miksmiks
          28.12.2023 11:04

          Как я уже говорил, в школе совсем недавно новым ФГОСом запретили преподавать на всех языках кроме Python, C++, C# и Java. Поскольку на трех последних трудно себе представить обучение программированию в массовой школе, то остаётся собственно Питон. И еще остался Паскаль в непрофильных классах.


          1. vadimr
            28.12.2023 11:04
            +1

            Я б по этому поводу сказал так: могло быть и хуже.


  1. miksmiks
    28.12.2023 11:04
    +3

    Статья слабая на мой взгляд. Если уж писать о PascalABC.NET на Хабре, то можно было бы более выразительные примеры привести. Которые есть и на сайте в примерах PascalABC.NET и в Телеграм-канале, и на канале youtube.

    Мы когда создавали PascalABC.NET 15 лет назад, то конечно Паскаль был очень популярен в обучении. Но уже тот Паскаль устаревал катастрофически. Уже даже школьники не хотели на нем писать.

    Поэтому вначале за основу был взят C# как один из лучших языков сегодня по языковым концепциям. Собственно, PascalABC.NET всегда - в каждый момент времени рассматривался как язык для обучения современному программированию.

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

    По статье - я бы рекомендовал автору лучше её оформить - везде имена функций писать с большой буквы и не делать такие ужасные отступы между колом и основным текстом (не знаю, можно ли это на Хабре).

    По факту: мы про обучение знаем всё, поэтому можем с уверенностью сказать, что старые представления об обучении программированию сейчас мало годятся. Мы сталкиваемся с профессионалами, которые говорят - этому сложно учить, надо школьников учить в красивых средах с красивыми окошками. Но - нет, мир обучения программированию драматически изменился за эти годы, как и мир ИТ. Школьники абсолютно свободно понимают лямбды - и быстрее чем профессиональный программист. Цепочки методов в стиле Arr(1..10).Where(x -> x.IsOdd).Select(x -> x * x).Print воспринимаются абсолютно свободно и сочетаются с алгоритмическим кодом в разных пропорциях. Совершенно естественно воспринимается использование словарей в задачах. Некоторые преподаватели, готовящие школьников к ЕГЭ, активно используют весь этот LINQ для сокращения кода на компьютерном экзамене - тут я не всегда с ними согласен - краткость - далеко не всегда хорошо.

    Тут еще нужно понимать, что PascalABC.NET плохо понимается многими, причем по-разному. Кто-то видит в нем игрушечный учебный язык для базового обучения младшеклассников, и тогда применение всех этих автоклассов, кортежей и перегрузки операций раздражает со словами "понапихали". Кто то видит в нем чистый язык Паскаль и раздражается любым новым конструкциям - в том числе автовыводу типов, описанию переменных внутри блока и попытке вообще отказаться от begin-end.

    PascalABC.NET - это конечно процентов на 30 - классический Паскаль, всё остальное - концепции современных языков программирования. По-существу, это - новый язык, и с этим трудно смириться.

    Но правы те. кто пишет, что время его уходит. Сейчас в российских школах с упорством, достойным лучшего применения, пытаются вычеркнуть Паскаль и перейти на Питон. Действительно, Питон при всех его недостатках лучше старого Паскаля - так уж точно. Но как писали здесь - имеет свои родовые травмы. Мешающие кстати говоря обучению. Но - питонизация школьного образования - необратимый процесс :) А ценность Питона, как уже писали здесь, "слегка преувеличена".

    В отношении обучения мне нравится Котлин - несомненно - компактный выразительный код во многих случаях, и по языковым концепциям очень хорош. Но до школ вряд ли дойдёт. Школы вообще умудрились ограничить в последнем их ФГОС список допустимых языков, на которых можно учить.


  1. nik_vr
    28.12.2023 11:04
    +2

    Начал писать свокй коммент по этой теме, и понял, что в формат комментария не укладываюсь.

    Так что ловите мнение школьного учителя информатики по вопросу выбора языка (и про ситуацию с изучением информатики в школах - в целом): https://habr.com/ru/articles/783900/


    1. miksmiks
      28.12.2023 11:04
      +1

      Ох ты, крутая статья, хорошо структурированная и написанная на одном дыхании.
      Да, с проблемами школьной информатики знаком - озвучивали их многие школьные учителя.
      Здесь ей-богу проблема выбора языка программирования отходит на второй план - тут бы учебник нормальный и ФГОС бы тоже нормальный.

      ЕГЭ по информатике у нас в ВУЗе тоже достаточно мало значит. Основная масса детей, которые готовились только к ЕГЭ, сдавали его на Питоне "не приходя в сознание" и сразу его забыли после сдачи. Переучивать с этой методики изучения языка программирования для сдачи ЕГЭ приходится с кровью.


  1. qw1
    28.12.2023 11:04
    -1

    a:= ReadReal('a =');

    Это выдаёт игрушечный язык, заточенный под чисто учебные задачи. В проде это ни разу не пригодится.


    1. SamuraiDev Автор
      28.12.2023 11:04

      Странный вывод. По такому же принципу можно сказать, что такой код в проде тоже не пригодится и тогда вообще все Паскали "игрушечные"

      var a: real;
      write('a= ');
      read(a);

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


      1. qw1
        28.12.2023 11:04

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


        1. miksmiks
          28.12.2023 11:04

          Это прямо конечно выдаёт игрушечный язык:
          a = input("Введите a:")

          Повсюду - игрушечные языки ))

          В проде - не нужно - не пользуемся


        1. SamuraiDev Автор
          28.12.2023 11:04

          По изначальному комментарию было сложно понять к чему именно претензия

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

          А приучать юных программистов к таким функциям - плохой стиль

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


          1. miksmiks
            28.12.2023 11:04

            Паттерн "приглашение к вводу" и затем ввод собственно очень распространен у школьников и как верно заметили - у студентов. В простых программах.

            Но прошу заметить - это тоже прод. Только это - прод для школьников. У них - свой прод. И свои паттерны. Относиться к ним с ненавистью - зачем? Это реально помогает повторяющиеся куски кода писать коротко.

            Что же касается студентов, то мы с ними пишем так:

            uses NUnitABC;
            uses MyFuncs;
            
            const eps = 1e-10;
            
            [Test, Combinatorial]
            procedure Test4([Values(1,3,5,7)] a: real; 
              [RangeAttribute(1,200)] b: real);
            begin
              Assert.AreEqual(Hypot(a, b), Sqrt(a * a + b * b), eps);
            end;
            
            begin
            end.

            Затем - запуск модульных тестов из IDE. И вводить ничего не надо.