Сообщение 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>понятно, что нельзя иметь
Да много чего нельзя. Переменную типа void нельзя объявить. Нельзя вот так сделать (слегка обобщенный псевдокод):
Вот такого — нету, а это и есть самое главное. "void" — это не тип, а заглушка. Это и есть "procedure", только записывается короче.
MAG>Но да. Лажа в какой-то мере такая же, что и function/procedure в Паскале. Другое дело, что в Паскале с ними сталкиваешься сразу, а в C# можно долго не знать ни про Action ни про Func
Так и с void и его особенностями тоже сразу сталкиваешься.
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>понятно, что нельзя иметь
Да много чего нельзя. Переменную типа void нельзя объявить. Нельзя вот так сделать (слегка обобщенный псевдокод):
Вот такого — нету, а это и есть самое главное. "void" — это не тип, а заглушка. Это и есть "procedure", только записывается короче.
MAG>Но да. Лажа в какой-то мере такая же, что и function/procedure в Паскале. Другое дело, что в Паскале с ними сталкиваешься сразу, а в C# можно долго не знать ни про Action ни про Func
Так и с void и его особенностями тоже сразу сталкиваешься.
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 и его особенностями тоже сразу сталкиваешься.