Здравствуйте, mrTwister, Вы писали: T>Зато у них есть общая операция '+' и мы вместо строки можем подставить (substitute) число и наоборот. То есть они ведут себя так, как будто у них есть базовый тип, определяющий операцию '+'. Вот тут то как раз LSP и нарушается.
Нет, не нарушается. Базовый тип у них — моноид. Пока ты не используешь специфичные для строк или чисел особенности операции "+" — все будет ок.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, mrTwister, Вы писали: T>>Зато у них есть общая операция '+' и мы вместо строки можем подставить (substitute) число и наоборот. То есть они ведут себя так, как будто у них есть базовый тип, определяющий операцию '+'. Вот тут то как раз LSP и нарушается. MC>Нет, не нарушается. Базовый тип у них — моноид. Пока ты не используешь специфичные для строк или чисел особенности операции "+" — все будет ок.
А если я напишу "a + b — c", то уже не "ок" и LSP идет к черту?
PS.: По поводу виртуальных функций я так понял, возражений нет?
Здравствуйте, mrTwister, Вы писали: T>А если я напишу "a + b — c", то уже не "ок" и LSP идет к черту?
А в нашем моноиде минуса не было. Только плюс был.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, mrTwister, Вы писали: T>>А если я напишу "a + b — c", то уже не "ок" и LSP идет к черту? MC>А в нашем моноиде минуса не было. Только плюс был.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, mrTwister, Вы писали: T>>И что? Я не имею права такой код написать? MC>В тюрьму тебя не посадят, но LSP к нему неприменим.
Здравствуйте, mrTwister, Вы писали: T>Почему неприменим?
Потому что тут используется операция "-", которая определена только для чисел (для дочернего класса).
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, mrTwister, Вы писали: T>>Почему неприменим? MC>Потому что тут используется операция "-", которая определена только для чисел (для дочернего класса).
Более того, для моноида операция «+» коммутативна только для единичного элемента. Коммутативность сложения чисел так же — свойство дочернего класса.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, mrTwister, Вы писали: T>>Почему неприменим? MC>Потому что тут используется операция "-", которая определена только для чисел (для дочернего класса).
Здравствуйте, mrTwister, Вы писали:
MC>>Потому что тут используется операция "-", которая определена только для чисел (для дочернего класса). T>Барабанная дробь: javascript:alert('1' + '2' — '3'); => 9 T>P.S.: то, что за кадром работает динамическая типизация — это уже технические детали реализации магии.
То есть мы типа должны забыть в этот момент о динамической типизации, как о неудобном факте? Только тогда этот пример покажет нам, что для строк определена операция вычитания.
Здравствуйте, mrTwister, Вы писали: T>Барабанная дробь: javascript:alert('1' + '2' — '3'); => 9
Ну ок, пусть определена. Но она все равно не входит на наш моноид, который мы считаем суперклассом для чисел и строк.
Здравствуйте, anonymous, Вы писали:
A>Программа на любом языке «немножко плохо предсказуемо работает», если программист не позаботился почитать документацию по языку.
Тут есть такая проблема, что можно написать функцию, которая суперски работает, но только до той поры, пока в неё не прийдёт строка "12" вместо числа 12...
Приятной и лёгкой тебе отладки!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
A>>Программа на любом языке «немножко плохо предсказуемо работает», если программист не позаботился почитать документацию по языку. E>Тут есть такая проблема, что можно написать функцию, которая суперски работает, но только до той поры, пока в неё не прийдёт строка "12" вместо числа 12...
На любом языке «можно написать функцию, которая суперски работает, но только до той поры, пока в неё не придёт» что-то неожиданное, если программист не позаботился почитать документацию по языку, пошевелить мозгами, написать юнит-тесты (нужное подчеркнуть, дописать своё).
Здравствуйте, anonymous, Вы писали:
A>Здравствуйте, Erop, Вы писали:
A>>>Программа на любом языке «немножко плохо предсказуемо работает», если программист не позаботился почитать документацию по языку. E>>Тут есть такая проблема, что можно написать функцию, которая суперски работает, но только до той поры, пока в неё не прийдёт строка "12" вместо числа 12...
A>На любом языке «можно написать функцию, которая суперски работает, но только до той поры, пока в неё не придёт» что-то неожиданное, если программист не позаботился почитать документацию по языку, пошевелить мозгами, написать юнит-тесты (нужное подчеркнуть, дописать своё).
«Можно написать функцию, которая суперски работает, но только до той поры, пока в неё не придёт что-то неожиданное» даже если программист прочитал все доки, пошевелил мозгами, и обложил все тестами, просто вероятность меньше(это если случайно, специально сделанные случаи называются закладками, и за них принято бить по рукам). Мир не совершенен, увы.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, Eugeny__, Вы писали:
A>>На любом языке «можно написать функцию, которая суперски работает, но только до той поры, пока в неё не придёт» что-то неожиданное, если программист не позаботился почитать документацию по языку, пошевелить мозгами, написать юнит-тесты (нужное подчеркнуть, дописать своё). E__>«Можно написать функцию, которая суперски работает, но только до той поры, пока в неё не придёт что-то неожиданное» даже если программист прочитал все доки, пошевелил мозгами, и обложил все тестами, просто вероятность меньше(это если случайно, специально сделанные случаи называются закладками, и за них принято бить по рукам). Мир не совершенен, увы.
Кто же спорит? Но как в этом виноват язык программирования?