Это я, действительно, промахнулся...Я просто не понимаю этот кусок кода, извини
interface Mybool {
};
class F implements Mybool {
}
class T implements Mybool {
}
function if_then_else(T $bool, $true_actor, $false_actor)
{
return $true_actor;
}
function if_then_else(F $bool, $true_actor, $false_actor)
{
return $false_actor;
}
$mybool = new F();
function act(Mybool $mybool)
{
echo if_then_else($mybool,"true","false");
}
Здесь две ошибки. В третьем случае вная, так как нет метода t. А во вором неявная, потому что несмотря на то, что есть два метода с одинаковыми названиями это не значит что они делат одно и то же. Если животное серое у него большие уши и короткий хвост, то это может быть и слон, и заяц и не правильно расчитывать что от одной в морковки в день они не звохнут.@Adelf, система не анализирует структуру класса A, а типовую метку Base. Это и есть именованная система типов.
Если бы можно было сделать так:
тогда это была бы структурная система типов.Код:class A { public function hello($string); } class B { public function hello($string); } class C{} function test(A $t){ $t->t(); } test(new A()}; test(new B()}; test(new C()}; // а вот тут ошибка :)
Да, ошибся, процитировал сообщение. Нужен верный вызов.В третьем случае явная, так как нет метода t
Тоже согласен. Это проблема.А во вором неявная
Лично для меня большой секрет, почему функциональное программирование не поглотило Web.твои утверждения про проще и удобнее зыждятся на какой-то идеалогии, а не на фактах
Нет. Но занимаюсь формальной верификацией кода. Точнее возможностями формальной верификации с помощью статической системы типов.свой язык пишешь?
function if_then_else(T $bool, $true_actor, $false_actor)
{
return $true_actor;
}
function if_then_else(F $bool, $true_actor, $false_actor)
{
return $false_actor;
}
То о, чём я говорю гораздо шире. Но в частности, да.Ты про что-то такое, чтоли?
К сожалению, нет.И в Java и в C# это легко возможно. Именно такой же записью. Называется перегрузка методов.
Отразить семантику в именах, какие еще варианты-то?Но не очень понятно, что делать с возможностью определить два одинаковых интерфейса, которые семантически различаются.
А зачем кастить? При следующем оверлоаде и так все сработает, информация о типах никуда не делась. У меня сложилось впечатление, что ты хочешь безболезненно нарушать LSP.Как только мы выполним каст к Mybool, мы уже не можем произвести обратный каст к F или T явно.
Потому что, если не брать узкую область клепания контентных говносайтов, веб-приложение ничем принципиально не отличается от просто приложения, а для описания бизнес-логики ничего лучше объектов не придумано.Лично для меня большой секрет, почему функциональное программирование не поглотило Web
Проблема ORM - это проблема https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch, дело не в сложности. Да и сам по себе impedance mismatch нерешаемой проблемой не является (за исключением ActiveRecord) - просто маппинг в ряде случаев необходимо писать вручную.проблемы, например, ORM -- это проблемы очень сложной системы данных
В Java c именованной системой работать не будет. А в Haskell всё будет работать на уровне статической проверки типов.При следующем оверлоаде и так все сработает
У Web приложения меньше императивности. Собственно само приложение не зависит от времени, потому может быть полностью функциональным, это следствие работы протокола обмена данными. Потому более простая форма объектного подхода, функциональная, казалось бы должна была бы Web поглотить.веб-приложение ничем принципиально не отличается от просто приложения
Крайне спорное утверждение.для описания бизнес-логики ничего лучше объектов не придумано.
Здесь вообще нет подтипов.ты хочешь безболезненно нарушать LSP.
"Лучше" - это плохое слово, согласен - это субъективно. Скажу иначе - проще. По крайней мере, в бизнес-задачах: "перевод" с языка предметной области на язык объектов обычно намного более прямолинеен и очевиден.Крайне спорное утверждение.
Давай код, ты напишешь CRUD приложение для веба на функциональном языке в функциональном стиле, а я на php и сравним что должно поглотить веб.Потому более простая форма объектного подхода, функциональная, казалось бы должна была бы Web поглотить.
обоснуешь? мне сложно представить себе что-либо более императивное, чем HTTP и его обработкаУ Web приложения меньше императивности.