Форум программистов, компьютерный форум, киберфорум
Наши страницы
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Соколиный глаз
C#
262 / 203 / 121
Регистрация: 25.07.2014
Сообщений: 4,068
Записей в блоге: 2
Завершенные тесты: 4
1

Новое в PascalABC.Net

08.08.2018, 22:17. Просмотров 357. Ответов 3

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

Добавлено через 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2018, 22:17
Ответы с готовыми решениями:

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

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

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

Литература по PascalABC.NET
Очень часто новички (особенно те, которые леняться юзать поиск) спрашивают: а существует ли...

PascalABC.NET , массив
Помогите пожалуйста дописать программу Program ex_3; const m: Array of real =...

3
Соколиный глаз
C#
262 / 203 / 121
Регистрация: 25.07.2014
Сообщений: 4,068
Записей в блоге: 2
Завершенные тесты: 4
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
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
28038 / 18692 / 7367
Регистрация: 22.10.2011
Сообщений: 32,744
Записей в блоге: 6
18.08.2018, 14:17 3
И опять же, объясните мне кто-нибудь понятным языком, зачем в Паскале, при наличии модулей, нужны пространства имен? Что это даст?
0
Соколиный глаз
C#
262 / 203 / 121
Регистрация: 25.07.2014
Сообщений: 4,068
Записей в блоге: 2
Завершенные тесты: 4
18.08.2018, 15:12  [ТС] 4
Цитата Сообщение от volvo Посмотреть сообщение
Что это даст?
Возможность хвастаться тем, что они есть в PascalABC.Net. Если серьезно - то, лично мне, не ясно, как это может пригодится, если пространства имён повторяют модули в своем функционале. Тем более, они более ограничены, чем в C#. Разнести, например, классы по разным файлам одного пространства имён не получится.
0
18.08.2018, 15:12
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2018, 15:12

Задачи PascalABC.NET
Ребят, не могу задачи что-то решить. Я знаю, что среди вас есть программисты. Именно поэтому прошу...

Автозагрузка на PascalABC.NET
Уважаемые участники форума, пожалуйста, помогите! Нужен исходный код на помещение проги в...

OpenGL в PascalAbc.Net
Искал уроки именно для этой среды,не нашел.Но все же не здался,тем более зная что он расчитан на...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.