аnon
аnon
аnon
что уже не в первый раз стеб в сторону пайтона встречаешь?
аnon
у хаудихо спроси
аnon
+
аnon
он аутист
аnon
ему простительно
Andrey
тебе кошмарной ночной приснился, иди спи дальше лучше)))
аnon
°•° HANZO
°•° HANZO
Для микроконтроллеров
°•° HANZO
А так интегрируют его частенько в Java всякие
Paul
От жавистов, типа нет наследования - нет ооп
Paul
ну, на это очень хорошо стебаться в ответ:
class Human implements Eater, Shiter, Breather, Drinker, Walker, Swimmer, Dreamer, Worker {}
Max
Добрый,
для удобства хотел бы держать некий cheatsheet по ГО, посоветуете достойный?
Maks
Ну вот кстати реализация интерфейсов в го конечно интересная)
Maks
Правда не оч удобно смотреть кто реализовал интерфейс а кто нет
Maks
Парни, вопрос есть
Maks
Как в голанге сделать следующее
Maks
есть число например 241. Я хочу получить все его цифры без перевода в строку и без операции деление, остатка от деления
Maks
можно ли как то это сделать через память
Maks
через двоичную типо
Maks
через байтики
Andrey
Ну попробуй битовый сдвиг, если ты про него
Paul
Из-за строгой типизации в яве в классе всегда есть ещё одна ось изменения — имплементируемые интерфейсы, поэтому SRP идёт лесом.
Paul
Добавлением ещё одной оси изменений, не? У нас есть готовый класс Human со всеми законченными методами, есть несколько уже имплементируемых интерфейсов. И тут мы решили добавить класс Tax, у которого есть метод, которому надо передать то, что может платить налоги. Делаем интерфейс TaxPayer, и вуаля — законченый класс Human надо переписать, чтобы он имплементировал интерфейс TaxPayer. А если мы решим брать налоги ещё и с камней, то переделывать придётся ещё и класс Stone
Paul
И поле Stone? SRP нужен, чтобы меньше трогать готовые классы, не в поведении дело. Иначе это был бы Static Behavior Principle
Paul
Но да, можно сделать абстрактный класс TaxPayer, у него метод payTax и реализацию для каждого stoneTaxPayer, humanTaxPayer, тогда не надо менять класс Human. Смотришь в прод, а там миллион классов вместо одного интерфейса
Paul
Какую задачу выполняет класс Human?
Paul
Ну, вот про это я и написал выше. Миллион классов
Paul
Мы так любим не солид, мы так любим писать меньше кода
Paul
Потому что мы жили в стране без налогов?
Paul
Я это тоже написал, и что? Принципы не говорят о том, что можно, а о том, что лучше
Paul
agile, не?
Paul
Ну вот не было в стране налогов, а тут появились. Всё, делаем новый продукт?
Paul
Какому аналитику придёт в голову, что камни могут плотить нологи?
Paul
Это не моя задача, я разработчик. Что, я должен думать за аналитика?
Paul
Я вёл речь не про решение, которое сразу же и написал. Я вёл речь про то, что в golang с его утиной типизацией это делается намного элегантнее, чем в яве. А то некоторые пишут, что golang для сурового энтерпрайзного прода меньше подходит:)
Maks
Я все равно не понял в чем проблема srp в джаве. Вот был у тебя хуман с интерфейсами слип, ит, дринк, ворк. В голанге ты это через утиную делаешь в джаве через имплементацию. Там где ты это все вызываешь ты вяжешься на интерфейсы и там и тут. Далее ты хочешь научить платить налоги. Имплементируешь интерфейс уплаты налогов и в джаве и в голанге. Где нарушение срп? Далее, если у тебя какие то классы платят налог одинаково, а какие то как то иначе - ты создаешь поле taxPayer типа интерфейс внутри объектов и в конструктор передаешь нужную имплементацию. А через интерфейс так же вызываешь имплементацию приватного поля
Maks
по моему ты сам ответил себе
Так да, но там не получится будто как то математически решить эту задачу) по этому самое просто и логичное через остаток от деление и целочисленное
Alexander
у тебя есть двоичная запись числа, в строковой форме ты только двоичную можешь получить перебирая разряды
Maks
Так я не строку получаю. А инт.
Alexander
ну да не суть
Maks
Там прост задачка была для новичков со сложностью супер изи - как посчитать сумму цифр в числе не переводя в строку(не перебирая цифры получается)
Maks
Вот решение через деление вроде ок но стало интересно как еще можно
Alexander
не, ну можно сдвигать, помнить какой у тебя текущий разряд в десятичной, суммировать
Paul
Я все равно не понял в чем проблема srp в джаве. Вот был у тебя хуман с интерфейсами слип, ит, дринк, ворк. В голанге ты это через утиную делаешь в джаве через имплементацию. Там где ты это все вызываешь ты вяжешься на интерфейсы и там и тут. Далее ты хочешь научить платить налоги. Имплементируешь интерфейс уплаты налогов и в джаве и в голанге. Где нарушение срп? Далее, если у тебя какие то классы платят налог одинаково, а какие то как то иначе - ты создаешь поле taxPayer типа интерфейс внутри объектов и в конструктор передаешь нужную имплементацию. А через интерфейс так же вызываешь имплементацию приватного поля
В том, что когда ты добавляешь интерфейс, тебе надо менять класс, чтобы указать, что он его имплементирует. У тебя появляется ещё один повод менять класс. Чтобы этого избежать, приходится городить дополнительные классы.
Maks
Paul
Так я про яву говорил:) В голанге наоборот это хорошо сделано:)
Maks
Потому что у тебя этот метод не реализован, так как раньше этого юзер не делал
Maks
Просто это одинаково получается
Paul
Ты реализуешь интерфейс там, где он используется и не трогаешь исходный тип. Он у тебя хранится в каком-нибудь пакете и ты туда не лезешь несколько лет.
Paul
Интерфейсы логичнее всего хранить там, где они используются и утиная типизация это позволяет
Maks
Ну смотри. В голанг
‘’’
interface Eater {
func Eat()
}
type Human struct {
}
func (h Human) Eat()
‘’’
Java не буду расписывать
‘’’
class Human implement Eater{}
‘’’
Вопрос структуризации папок не относится к вопросу срп. Пакеты в голанг удобные, но это не значит что в джаве принцип срп будет нарушен. По сути ты же в голанг тоже будешь класс менять. Точнее структуру. Добавляя ей какой то метод. Реализацию интерфейса. А то что ты говоришь про неизменность - это другой принцип. Принцип открытости закрытости. Он довольно спорный и часто его применение излишне, но совершенно ясно зачем он нужен.
Maks
В случае с srp ты в любом случае меняешь класс и только в одном месте
Maks
И только в одном случае
Maks
В го просто иначе выглядит это, но как по мне принцип и способ реализации почти такой же.
Maks
Кто нить взрослый порешайте спор))
Alexandr🇷🇺
Всем здрасте! Подскажите, плиз, что-то туплю сильно. Как такое анмаршалить:
{
"data" : {
"keys": [
"Val0",
"Val1",
и т.д.
]
}
}?
Alexandr🇷🇺
Alexandr🇷🇺
В первую очередь)
Alexandr🇷🇺
Не помогает
Herman
Data и Keys
Maks
Alexandr🇷🇺
Alexandr🇷🇺
Помогло, колдовство
Maks
НЕНАДА ДЯДЯ!
Alexandr🇷🇺
А почему так? Если оно все рядышком
Andrey
Что значит "рядышком"?
Herman
вообще советую если ide чет подсвечивает - почитать, что же там такое
Maks
у тебя есть приватные и публичные пропы. К приватным пропам доступа нет.