Информация об изменениях

Сообщение Re[5]: Чем плох Паскаль? от 16.06.2019 9:05

Изменено 16.06.2019 9:20 AlexRK

Re[5]: Чем плох Паскаль?
Здравствуйте, MamutArGud, Вы писали:

MAG>В каком месте в C, C++, Java и т.п. есть разделение на процедуры и функции?


Ну как же. Так называемый "тип" void — это вот оно и есть.

ARK>>- они все тоже туда же. Иди попробуй объясни, зачем в сикраше Action и Func ... да хоть кому бы то ни было. Выкинуть и забыть этот весь шлак как страшный сон!

MAG>Это скорее из-за ущербности системы типов и дизайна.

Безусловно. Но по факту это и есть деление на процедуры и функции.

MAG>понятно, что нельзя иметь
out void


Да много чего нельзя. Переменную типа void нельзя объявить. Нельзя вот так сделать (слегка обобщенный псевдокод):

function Combine<T...>(a: function() T..., b: function(T...))      // принимает две функции, которые можно скомбинировать - вторая принимает того же, что возвращает первая
{
    var result: T;
    result := a();
    b(result);
}

function A1() result: int           // ничего не принимает, возвращает целое число
{
    Print("A1 ");
    return 33;
}

function B1(param: int)             // принимает целое число, ничего не возвращает
{
    Print("B1 ");
    Print(param);
}

function A2()                       // ничего не принимает и не возвращает (как будто принимает и возвращает "ничего")
{
    Print("A2 ");
}

function B2()                       // ничего не принимает и не возвращает (как будто принимает и возвращает "ничего")
{
    Print("B2 ");
}

function Main()
{
    Combine(A1, B1);       // печатает "A1 B1 33"

    Combine(A2, B2);       // И ЭТО ТОЖЕ РАБОТАЕТ!!! печатает "A2 B2 "
}


Вот такого — нету, а это и есть самое главное. "void" — это не тип, а заглушка. Это и есть "procedure", только записывается короче.

MAG>Но да. Лажа в какой-то мере такая же, что и function/procedure в Паскале. Другое дело, что в Паскале с ними сталкиваешься сразу, а в C# можно долго не знать ни про Action ни про Func


Так и с void и его особенностями тоже сразу сталкиваешься.
Re[5]: Чем плох Паскаль?
Здравствуйте, MamutArGud, Вы писали:

MAG>В каком месте в C, C++, Java и т.п. есть разделение на процедуры и функции?


Ну как же. Так называемый "тип" void — это вот оно и есть.

ARK>>- они все тоже туда же. Иди попробуй объясни, зачем в сикраше Action и Func ... да хоть кому бы то ни было. Выкинуть и забыть этот весь шлак как страшный сон!

MAG>Это скорее из-за ущербности системы типов и дизайна.

Безусловно. Но по факту это и есть деление на процедуры и функции.

MAG>понятно, что нельзя иметь
out void


Да много чего нельзя. Переменную типа void нельзя объявить. Нельзя вот так сделать (слегка обобщенный псевдокод):

function Combine<T...>(a: function() T..., b: function(T...))      // принимает две функции, которые можно скомбинировать - вторая принимает то же, что возвращает первая
{
    var result: T...;        // кортеж! может быть одна переменная, несколько переменных или НОЛЬ переменных!
    result := a();
    b(result);
}

function A1() result: int           // ничего не принимает, возвращает целое число
{
    Print("A1 ");
    return 33;
}

function B1(param: int)             // принимает целое число, ничего не возвращает
{
    Print("B1 ");
    Print(param);
}

function A2()                       // ничего не принимает и не возвращает (как будто принимает и возвращает "ничего")
{
    Print("A2 ");
}

function B2()                       // ничего не принимает и не возвращает (как будто принимает и возвращает "ничего")
{
    Print("B2 ");
}

function Main()
{
    Combine(A1, B1);       // печатает "A1 B1 33"

    Combine(A2, B2);       // И ЭТО ТОЖЕ РАБОТАЕТ!!! печатает "A2 B2 "
}


Вот такого — нету, а это и есть самое главное. "void" — это не тип, а заглушка. Это и есть "procedure", только записывается короче.

MAG>Но да. Лажа в какой-то мере такая же, что и function/procedure в Паскале. Другое дело, что в Паскале с ними сталкиваешься сразу, а в C# можно долго не знать ни про Action ни про Func


Так и с void и его особенностями тоже сразу сталкиваешься.