Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
1

Новое в PascalABC.Net

08.08.2018, 22:17. Показов 923. Ответов 3

Author24 — интернет-сервис помощи студентам
Я буду сюда постить новые фичи этого языка (интересно, чем все закончится). Если Вы знаете какие-то новые фичи, то пожалуйста, отпишитесь здесь.

Добавлено через 5 минут
Расширенные свойства
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
uses System;
 
type
  IPrintable = interface
    function GetStringRepresentation(): string;
    
    procedure Print();
    
    procedure Println();
  end;
  
type
  TBox = class(IPrintable)
  private
    fWidth, fHeight: integer;
    
  public
    property Width: integer
      read fWidth
      write
      begin
        if (value < 0) then
          raise new ArgumentException();
        fWidth := value;
      end;
      
    property Height: integer
      read fHeight
      write
      begin
        if (value < 0) then
          raise new ArgumentException();
        fHeight := value;
      end;
    
    constructor Create(width, height: integer) := (self.Width, self.Height) := (width, height);
    
    function GetStringRepresentation(): string := $'({Width}, {Height})';
    
    procedure Print() := Write(GetStringRepresentation());
    
    procedure Println() := Writeln(GetStringRepresentation());
  end;
 
begin
  (new TBox(-1, 2)).Println();
end.
Как и в C# в сеттере можно использовать неявно объявленный параметр value.

Добавлено через 3 минуты
Интерполированные строки
Pascal
1
2
3
4
5
uses System;
begin
  var (X, Y) := ReadInteger2();
  Writeln($'X = {X}, Y = {Y}'); // То же самое, что и WritelnFormat('X = {0}, Y = {1}', X, Y);
end.
Как и в C# теперь появилась возможность использовать интерполированные строки, являющиеся синтаксическим сахаром, насколько помню, над string.Format.

Добавлено через 10 минут
match-with
Конструкция match-with для сопоставления типов (case по типам, грубо говоря):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
type
  TA = class
  end;
  
  TB = class(TA)
  end;
 
begin
  var X := new TB();
  match X with
    TB(var b): Writeln('X является экземпляром класса TB');
    TA(var a): Writeln('X является экземпляром класса TA'); // TA - тип к которому приводится X; a - переменная, в которую записывается результат приведения.
  end;
end.
Добавлено через 8 минут
Пример использования match-with:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
uses System;
 
var
  X: array of integer;
 
begin
  SetLength(X, 1);
  match X with
    &Array(var a): Writeln('X является массивом');
    IEnumerable<integer>(var b): Writeln('X является IEnumerable<integer>');
  end;
end.
2
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2018, 22:17
Ответы с готовыми решениями:

В чем разница PascalABC.net и PascalABC
Скажите в чем разница PascalABC.net И PascalABC. Помню когда-то давно программы работающие в...

Установится ли PascalABC.NET на систему, где установлен только .NET 4.6.1?
Привет всем. Вопрос, собственно, озвучен выше. Конкретнее: есть компьютер со свежеустановленной...

Перевести с PascalABC.net на JS
Помогите перевести на JS c PascalABC.Net. Пробывал сам перевести, считает не так как на Pascal...

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

3
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
18.08.2018, 14:08  [ТС] 2
Пространства имён (те же самые модули, только немного по-другому работают).
Объявление пространства имён:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace ИмяФайлаПространстваИмён;
interface
  { раздел интерфейса }
 
implementation
  { раздел реализации }
 
initialization
  { раздел инициалиализации }
 
finalization
  { раздел финализации }
 
end.
Точнее - всё как в модуле. Сокращенный вариант объявления:
Pascal
1
2
3
namespace ИмяФайлаПространстваИмён;
 
end.
Подключение пространства имён (файла его содержащего) производится так:
Pascal
1
{$includenamespace ИмяФайлаПространстваИмён}
Но: использование этой директивы в пространствах имён запрещено. При попытке это сделать:
NS.pas(x) : Использование includenamespace в модулях недопустимо

Не по теме:

Но, разработчики отказались от публикации этой фичи, так как:

...там интеллисенс не сделан.

0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
18.08.2018, 14:17 3
И опять же, объясните мне кто-нибудь понятным языком, зачем в Паскале, при наличии модулей, нужны пространства имен? Что это даст?
0
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
18.08.2018, 15:12  [ТС] 4
Цитата Сообщение от volvo Посмотреть сообщение
Что это даст?
Возможность хвастаться тем, что они есть в PascalABC.Net. Если серьезно - то, лично мне, не ясно, как это может пригодится, если пространства имён повторяют модули в своем функционале. Тем более, они более ограничены, чем в C#. Разнести, например, классы по разным файлам одного пространства имён не получится.
0
18.08.2018, 15:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2018, 15:12
Помогаю со студенческими работами здесь

VK.API на PascalABC.NET
Доброго времени суток, написал модуль для PascalABC.NET, с помощью которого можно использовать...

Превращение PascalABC.Net в C#
Зачем разработчики превращают PascalABC.Net в подобие C#? В частности, зачем в разрабатываются...

PascalABC.NET Записи
Помогите переделать по процедуры и функции:cry: type spisok = record surname: string; ...

PascalABC.NET и Excel
Программа должна искать в тексте из файла .xlsx значение,которое перед этим ввел пользователь. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru