• Как в kotlin правильно сделать кеширование свойств объекта?

    @koperagen
    Вы уверены, что эти вычисления вашу программу нагружают? Просто проблема в том, что тут с какой стороны не подойти, она значительно усложнится от добавления таких вот оптимизаций. Если нужно поработать с каким-то значением много раз, то самое простое решение это сохранить его в локальную переменную там, где это необходимо. Другим простым решением может быть data class с неизменяемыми свойствами, и вместо изменений значений создание копии через copy. Тут ещё стоит спросить, а многопоточная ли у вас программа, а отображаются ли эти свойства где-то в UI.
    Если же вопрос чисто академический, типа как в теории можно делать именно то, что вы хотите, то смотрите в сторону мемоизации или свойств-делегатов. Через мемоизацию функция от аргумента в результат при одинаковых аргументах будет высчитываться только один раз, результат обычно сохраняют в мапу. Тогда можно написать этих мемоизированных функций по количеству свойств класса, которые вы хотите кэшировать, и при обращении к проперти вызывать соответствующую функцию в gettere. Проблема тут в том, что в мапа это отображение из одного объекта в другой, а у функции несколько аргументов может быть. Придется писать data classы для каждого такого случая. На делегатах можно нагородить что-то такое
    Шок контент, не рекомендую использовать

    data class Box(var height: Int, var width: Int) {
        val area by DependingCalculation(::height, ::width) {
            println("Calculated")
            height * width
        }
    }
    
    class  DependingCalculation<R>(private val dependencies: List<KProperty0<*>>, private val calculation: () -> R) {
        private var prevValues = dependencies.map { it.get() }
        private var cache = calculation()
    
        operator fun getValue(thisRef: Any?, property: KProperty<*>): R {
            val newValues = dependencies.map { it.get() }
            return if (newValues == prevValues) {
                cache
            } else {
                calculation().also {
                    prevValues = newValues
                    cache = it
                }
            }
        }
    
        constructor(vararg dependencies: KProperty0<*>, calculation: () -> R) : this(dependencies.asList(), calculation)
    }
    
    fun main() {
        val box = Box(1, 2)
        println(box.area)
        println(box.area)
        box.width = 4
        println(box.area)
    }

    Ответ написан
  • Как пишутся читы на MineCraft, CS:GO, Dota2 и другие игры?

    @koperagen
    Вот есть чит для CS:GO, написанный на kotline, JVM https://github.com/Jire/Charlatano.
    Думаю в исходном коде можно найти много интересного с целью изучения.
    Ответ написан
    Комментировать
  • Как исправить проблему с интерфейсом CrudRepository?

    @koperagen
    В исключении написано Unable to locate Attribute with the the given name [nameUser]
    Т.е. соглашение именовать поля с маленькой буквы, а у вас с большой. Попробуйте назвать поле nameUser
    Ответ написан
  • Как вызвать нужный переопределенный метод используя полиформизм?

    @koperagen
    Коротко: В рамках полиморфизма ваша задача решается созданием нового объекта, A2.
    Объяснение: Если определить метод в классе-родителе, а затем переопределить его у ребенка, то всегда будет вызван метод фактического класса объекта, т.е. класса чей конструктор был вызван при создании объекта. Вызываемый метод не будет зависеть от типа ссылки на этот объект. За счет этого, собственно, достигается полиморфизм: Вам не нужно знать, какая именно реализация метода у объекта, который вам передали, и вообще реальный класс объекта. Вы объявляете ссылку на интерфейс/абстрактный класс/открытый класс в качестве параметра вашей функции/конструктора вашего класса и работаете с доступными этой ссылке методами, чтобы сделать то, для чего ваша функция/класс предназначен. Тем самым давая возможность клиенту варьировать поведение вашего кода.
    Приведение типа дает доступ к специфичным для конкретного класса полям, т.е. был бы в A2 ещё какой-то метод (не реализация метода родителя, а именно что-то свое), после приведения вы могли бы его вызывать. Но это, опять же, не про полиморфизм.
    Ответ написан
    Комментировать
  • Как можно отсортировать массив за наиболее меньше прохождений?

    @koperagen
    Такой маленький диапазон можно за два проход отсортировать
    https://ru.m.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80...
    Ответ написан
    Комментировать
  • Изменение английских букв «с», «а», «е», «у», «к», «o», «p», «x» на русские в составе слова?

    @koperagen
    import java.util.Map;
    
    public class Converter {
        static final Map<Character, Character> map = Map.of('y', 'у', 'c', 'с', 'x', 'х', 'a', 'a'); // Дополнить
    
        public static String replaceSymbols(String string, Map<Character, Character> map) {
            final var sb = new StringBuilder(string.length());
            for (int i = 0; i < string.length(); i++) {
                sb.append(map.getOrDefault(string.charAt(i), string.charAt(i)));
            }
            return sb.toString();
        }
    
        public static void main(String[] args) {
            System.out.println(replaceSymbols("yxcayxcattttt", map)); // ухсaухсattttt
        }
    }
    Ответ написан
  • Профит от многопоточности на простом примере?

    @koperagen
    Взять и написать параллельный код на тредах не так уж тривиально. Лучше берите Stream API, с его помощью сортировки, map-reduce операции и много чего ещё отлично ускоряется кратно количеству ядер.
    Ответ написан
  • Как развернуть spring прлоижение на сервер?

    @koperagen
    Попробуйте heroku. Там есть инструкция для maven и gradle
    Платформа берет ваш исходный код из репозитория и разворачивает на своих серверах. За поиграться платить не придется
    Ответ написан
    Комментировать
  • Как вывести в JTextArea из файла содержимое?

    @koperagen
    Вы бы подробнее описали, что именно не получается. Складывается ощущение, что проблему даже не пытались решить. Строка не считывается? Текст не выводится?
    Судя по коду, вы создаете JTextArea textp , которая никуда не добавляется. Надо по аналогии с
    panel01.add(label02);
    panel01.add(text02);

    сделать
    Ответ написан
    5 комментариев
  • В чем суть процедурного программирования?

    @koperagen
    Следование принципам ООП помогает локализовать изменения в реализации, к примеру смена протокола передачи данных не повлияет на код, которому нужно "просто" отправить сообщения. Этого можно добиться введением интерфейса - отправителя сообщений и внедрением зависимости, к примеру через конструктор. Т.е. требуется дополнительное действие (создание и передача в конструктор) + нужно продумать интерфейс + немного увеличивается кодовая база.
    Но не всегда же требуется иметь возможность сменить протокол передачи данных. В структурном программировании код, отправляющий сообщение, просто вызывал бы вполне конкретную процедуру отправки массива байт по TCP. Такой код быстрее написать, но смена протокола потребует вносить изменения везде, где он используется

    p.s. не уверен, что правильно понял вопрос. Оказывается, есть отличие между процедурным и структурным программированием. Структурное все же намного ближе к нашему времени и современным языкам, наверно речь в вопросе именно о нем?
    Ответ написан
    Комментировать
  • Как задать стартовый клас в gradle (Kotlin, KotlinDSL,Gradle)?

    @koperagen
    Попробуйте поменять
    mainClassName = "dev.glo.Main"
    на
    mainClassName = "dev.glo.MainKt"
    Ответ написан
  • Как найти дубликаты в массиве и вывести?

    @koperagen
    val map = "AABCFD".groupBy { it }
    // {A=[A, A], B=[B], C=[C], F=[F], D=[D]}
    Ответ написан
    Комментировать
  • Как стать Котлин разработчиком?

    @koperagen
    Смотря, что вы под этим понимаете. Не думаю, что можно стать "профессиональным котлин разработчиком". Это будет либо мобильная разработка, либо бэкенд. В теории можно и десктоп с фронтом пилить. Но ни в одном из этих случаев знания самого языка не будут решающими.
    Если абстрагироваться и от направлений, то всегда будет полезно знать хотя бы распространенные структуры данных, парадигмы (структурная, объектно-ориентированная, функциональная), паттерны, используемые в этих парадигмах, принципы проектирования (SOLID, KISS, YAGNI). Это и к языку не привязано.
    Дальше - работа с БД (SQL, NoSQL), HTTP, асинхронность (Coroutines как пример средства реализации асинхронности). Тут придется выбирать библиотеки, доступные для котлина и изучать их.
    Это все скорее всего встретится. Но можно под андроид начать приложения делать и с 0. Есть обучающие курсы, в которых все нужное расскажут. По остальным направлениям их меньше, но тоже достаточно. Для бэкенда отправная точка - ktor, для desktop - tornadofx.
    Java код вам наверняка придется читать, поэтому хотя бы поверхностно стоит изучить.
    Ответ написан
    Комментировать
  • Java. Как вынести создание всех объектов из Main в другой класс?

    @koperagen
    Идея задания, видимо, в том, чтобы из метода этого нового класса (Пусть будет MessageService) возвращался массив.
    Как доставать? Создайте экземпляр MessageService в main, а затем вызовите нужный метод. Результат сохраните в переменную, аналогично созданию нового массива в первой строке.
    Ответ написан
    2 комментария
  • Стоит начинать андроид-разработку с котлина?

    @koperagen
    Раз нравится котлин, то с ним и изучайте. Архитектуру системы, используемые компоненты, ООП и принципы, паттерны проектирования, экосистему в целом.
    С этими знаниями вы без труда и на Java напишите приложение. Они - главный инструмент разработчика. Большую часть изучите вместе с первым ЯП. Параллельный процесс, причем довольно сложный. Не вижу смысла усложнять его чем-то, что вам не нравится.
    Ответ написан
    Комментировать
  • Как сделать, чтобы программа делала запись в БД в определенные часы?

    @koperagen
    stackoverflow (без спринга)
    Ответ написан
    Комментировать
  • Что выбрать начинающему, Java или Swift?

    @koperagen
    Попробуйте сами разные языки и решите, что вам нравится. Вам же нужно ДОЙТИ до черты, когда навыков будет достаточно для работы джуном. Вам каждый по разному посоветует. Мне вот было достаточно легко и интересно начинать учить Java, потому-что небольшое количество конструкций языка. Я мог уже спустя неделю-другую читать исходные коды стандартной библиотеки и, в основном, понимать, что там происходит. Но откуда знать, не возникнет ли у вас непреодолимое желание бросить все из-за каких-то минусов Java? Кому-то из моих знакомых больше нравится JS, кому-то питон. Им, конечно, будет гораздо проще дойти до джуна именно на эти позиции, как бы много разработчиков не требовалось для Android.
    Я думаю выбор языка поспособствует достижению цели и получению удовольствия от программирования. Но кроме программирования придется ещё решать задачи (алгоритмы и структуры данных, хотя бы основы ООП и т.д.), эти навыки в случае чего перейдут с вами в другой язык или экосистему и дадут не мало при трудоустройстве, какой бы язык не требовался работодателю.
    Ответ написан
    Комментировать
  • Как поддерживать соедиение с текущей таблицей H2 базы данных?

    @koperagen
    Ключевой момент в строке создания таблицы.
    Так она не будет пересоздаваться:
    stat.execute("create table if not exists test(id var(255) primary key, name varchar(255), age int)")
    Ответ написан
    2 комментария
  • Стереотип или нет "Хорошие программисты начинают с С/C++/Pascal"?

    @koperagen
    Вот, посмотрите, какие языки программирования выбирают в разных ВУЗах для обучения новичков. Никакого единого стандарта нет, встречаются даже чисто функциональные языки. Хотя с появления вопроса 5 лет прошло, думаю много какие университеты перешли на Python. Сейчас о нем говорят, записывают курсы, издают книги во многих предметных областях - data science, web, автоматизация рутинных задач, даже книги по алгоритмам есть. Если во время обучения вы что-то из этого попробуете или даже реализуете свой проект, то получите достаточно ценный опыт.
    Те же самые вещи в перечисленных языках будет реализовать сложнее, с другой стороны будет доступен низкоуровневый хакинг вроде вызовов ОС, создание GUI приложений в windows forms (нинада), работа с памятью. Поразвлечься можно, в общем. Но я не вижу причин, почему именно это научит программированию или поможет выработать стиль. Просто другой класс задач, другие проблемы решаются.
    Ответ написан
    Комментировать
  • Как написать парсер математических задач на java?

    @koperagen
    https://m.habr.com/ru/post/470247/
    Похоже на то, что вы хотите сделать?
    Ответ написан
    Комментировать