
Sergei
13.01.2018
01:54:55
И вроде в Pyhton

da horsie
13.01.2018
01:54:56
тааак

Sergei
13.01.2018
01:55:11
И подозреваю что в JS
Метод класса (static) - он по логике своей реализует поведение не отдельного экземпляра, а класса объектов в целом.

Google

da horsie
13.01.2018
01:57:07
interface Named {
toName(): string;
}
class Vasya implements Named {
toName() {return 'Vasya';}
}
...
function register(Named person) {
registry.add(person.toName());
}
у васи надо метод сделать статическим?
если да,то как быть с функцией register()?
наверно фиговый пример с людьми
но не важно
пусть не люди будут, а что-нить другое

Sergei
13.01.2018
02:08:24

da horsie
13.01.2018
02:09:04

Sergei
13.01.2018
02:09:30
Соответственно было бы очень странно делать метод static (который как раз говорил бы обратное)

da horsie
13.01.2018
02:09:38
это попадает в категорию "достаточная причина не делать статик"?
заменим toName() на toRace(), чтобы было ближе к сути
а registry пусть будет "перепись населения"

Google

Sergei
13.01.2018
02:11:29

da horsie
13.01.2018
02:12:15
а не только техническая независимость от this

Sergei
13.01.2018
02:13:34
Мммм можно ли сказать что вот это и было бы выражением семантики, "разные экземпляры вообще говоря..."?

da horsie
13.01.2018
02:13:44
ну да
потому что мы начинаем говорить о смысле тех объектов, которые мы описываем

Sergei
13.01.2018
02:14:16
?

da horsie
13.01.2018
02:14:42
и компилятор этой семантики не знает
если вернуться к статье, наверно этот случай попадает в категорию "виртуальные методы"
ибо часть интерфейса

Sergei
13.01.2018
02:17:07
Угу, мне тоже так кажется. Ибо есть зависимость от состояния объекта (и this - как "физическое проявление" этой зависимости).

da horsie
13.01.2018
02:17:26
такой зависимости нет
т.е. из кода класса она не следует

Sergei
13.01.2018
02:17:38
А у тебя кроме Vasya есть ещё и Petya, Sasha и т.д.?

da horsie
13.01.2018
02:17:44
ну да
а есть еще Оля, у которй результат зависит от фазы луны
вася и петя - неправильные названия классов, это должны быть названия экземпляров

Sergei
13.01.2018
02:18:57
И у каждого Petya, Sasha та же песня - метод на _все_ экземпляры возвращает одно и то же (у всех скажем экземпляров Sasha вернёт "yo!"?)

da horsie
13.01.2018
02:20:33
с людьми неудачный пример

Google

da horsie
13.01.2018
02:21:41
пусть будет getGender()
и классы каких-нить лягушек
смысл в том, что есть штуки, у которых свойство задано
оно не меняется

Sergei
13.01.2018
02:23:50
Меня в приведённом выше примере кода смущает в целом только вот что - ты вроде как регистрируешь _экземпляры_ класса, т.е. как будто они все могут давать разные результаты. Но из кода самого класса Vasya выглядит так, как будто разные результаты могут быть только у разных _классов_ (а не экземпляров). В этом месте вопрос - а почему тогда мы не регистрируем сами классы?

da horsie
13.01.2018
02:23:52
но является частью интерфейса
потому что оно не всегда зависит от класса (привет Оле)

Sergei
13.01.2018
02:25:35
:)
потому что оно не всегда зависит от класса (привет Оле)
Тогда как мне кажется "всё правильно сделал" - ну то есть "вообще говоря" зависимость от экземпляра таки существует, хотя в некоторых случаях (типа Васи, который не особо зависит от циклов Луны) эта зависимость вырожденная. Регистрируем экземпляры, метод принимает this (может неявно - зависит от языка).

da horsie
13.01.2018
02:28:56
ну например, у меня в проекте есть такая штука как именованные ссылки, они являются частью агрегата. в каких-то местах могут использоваться ссылки с определенными именами, в каких-то с произвольными. Поэтому есть интерфейс Link, а есть SelfLink implements Link, это ссылка с именем Self.
и допустим, в документе можно юзать только ссылки с именем self и related. Поэтому class SelfLink implements Link, DocumentLink
можно было бы делать if (link.name !=...) throw new Foo, но зачем нам if если есть полиморфизм

Sergei
13.01.2018
02:57:44
Мягкий вариант:
...
...
if (! link.compatibleWith(["а", "б", "х"])
throw BadLinkType(link);
...
...

da horsie
13.01.2018
04:47:05

andretshurotshka?❄️кде
13.01.2018
04:47:34
8 лет пишу без свитчей

da horsie
13.01.2018
04:47:49
вот и я решил поэкспериментировать

andretshurotshka?❄️кде
13.01.2018
04:47:50
брат жив

da horsie
13.01.2018
04:48:04
минимизировать количество if

Google

andretshurotshka?❄️кде
13.01.2018
04:48:13
Просто экспекшены не нужны

Sergei
13.01.2018
05:08:24
все равно if ;)
Оооок, передавай лямбду :)
...
...
link.executeWhenIncompatibleWith(["а", "б", "х"], ()->throw new BadLink())
...
...

andretshurotshka?❄️кде
13.01.2018
05:08:32
Лол

da horsie
13.01.2018
05:08:53

Ilia
13.01.2018
05:56:40
вот! зачем?
Чтобы иметь возможность вызвать этот метод без предварительного создания объекта


da horsie
13.01.2018
06:06:33
если мне нужна просто функция, я сделаю просто функцию

Ilia
13.01.2018
06:11:25

da horsie
13.01.2018
06:11:38

Ilia
13.01.2018
06:11:47

da horsie
13.01.2018
06:13:00
так зачем нужны статические методы? если не брать в расчет аргумент "в языке X статические методы это способ сделать Y, для которого нативное решение отсутствует в силу ограничения языка" (свободную функцию, именованный конструктор, итд)

Ilia
13.01.2018
06:16:47

Артур Евгеньевич
13.01.2018
06:17:12

Ilia
13.01.2018
06:18:16

Google

Ilia
13.01.2018
06:18:55

Артур Евгеньевич
13.01.2018
06:19:11
Ахах ?

da horsie
13.01.2018
06:19:30
да как угодно

Ilia
13.01.2018
06:20:41
А что так рассмешило?
Я понял, ты мне сейчас будешь доказывать, что PHP -это язык программирования, и даже более того, что это ООП язык...

Артур Евгеньевич
13.01.2018
06:22:16

Ilia
13.01.2018
06:22:27

da horsie
13.01.2018
06:23:41
ну она именованная уже, так что не лямбда

Ilia
13.01.2018
06:25:09
Нет, это сылка на неё именована, а не сама функция

da horsie
13.01.2018
06:25:13
предположим в языке есть просто функции. и функции высшего порядка. и неймспейсы и/или импорт/экспорт
блин, ну не важно
в контексте ооп - какая причина есть для существования статических методов?

Ilia
13.01.2018
06:26:58
так
Ну вот ты же не написал для main класс, метод класса и так далее.
Соответственно, ты даже интуитивно понимаешь, что есть случаи, когда классы и методы нужны, а есть когда они просто не нужны

da horsie
13.01.2018
06:28:38

Ilia
13.01.2018
06:30:04
что "это"?
То, что тебе классы и методы не всегда нужны

da horsie
13.01.2018
06:31:22
то есть еднственная причина - когда статические функции это костыль, потому что в языке нет возможности сделать иначе, так получается?