Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Изобретаем колесо для качественно новой архитектуры
Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос

koperagen

  • 40
    вклад
  • 0
    вопросов
  • 46
    ответов
  • 54%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Что значит однородные и неоднородные данные? Подчеркивающие структуры данных?

    koperagen @koperagen
    Ты набрел на сайт машинного перевода ответов со стаковерфлоу.
    В оригинале так:

    1. Arrays store homogeneous data. Collections store both homogeneous as well as heterogeneous data.
    По этим ключевым словам (java homogeneous heterogeneous data) гуглится такой ответ https://stackoverflow.com/questions/36700490/what-...

    2. In Arrays, there are no underlining data structures, whereas Collections have underlining data structures.
    Думаю тут опечатка, имеется ввиду underlying, т.е. "коллекции основываются на структурах данных". Для Map это, например, хэш массив, дерево, trie, для List связный список, массив и т.д.
    Ответ написан 10 янв.
    1 комментарий
    Нравится 2 1 комментарий
  • Почему при увеличении числа в корутинах, число иногда имеет другое значение?

    koperagen @koperagen
    В комментарии обсудили (: Лог выводится до того, как все корутины отработают увеличение счетчика
    Ответ написан 26 дек. 2020
    Комментировать
    Нравится 1 Комментировать
  • Как правильно скопировать проект с github?

    koperagen @koperagen
    На гитхабе можно из репозитория сделать шаблон
    https://docs.github.com/en/free-pro-team@latest/gi...
    Ответ написан 22 нояб. 2020
    1 комментарий
    Нравится 1 комментарий
  • Как создать язык программирования?

    koperagen @koperagen
    Ну, туториалы по созданию уже упомянали. Добавлю Компиляторы: принципы, технологии и инструменты
    Есть пример создания языков для LLVM https://llvm.org/docs/tutorial/ (реализацию можно найти и на других языках, как минимум видел на хаскеле и котлине)
    Ответ написан 15 нояб. 2020
    Комментировать
    Нравится 1 Комментировать
  • Стоит ли браться за программирование и что делать новичку?

    koperagen @koperagen
    Недавно тут кто-то постил Питер Норвиг: Обучитесь программированию за… 10 лет
    Начинать надо с учебников для начинающих
    Выбирай какой-нибудь, главное чтобы тебе понравилась подача и процесс. На этом этапе совершенно не важно что конкретно за язык. Нужно выбрать несколько и попробовать самому.
    Ответ на вопрос какие есть учебники для начинающих думаю сможешь найти на тостере, их тут было миллион
    Ответ написан 14 нояб. 2020
    Комментировать
    Нравится 2 Комментировать
  • Развитие в высоком и низком уровне. Что выбрать?

    koperagen @koperagen
    Лучше попробуй найти стажировку вотпрямщас, с тем что есть на руках. Ты либо сможешь пройти, либо получишь обратную связь по тому, каких знаний не хватает. Если времени на учебу и стажировку не хватает, проси пол ставки - это нормальная практика
    Ответ написан 12 нояб. 2020
    1 комментарий
    Нравится 2 1 комментарий
  • Перспективно ли становиться Android-разработчком?

    koperagen @koperagen
    Мобильными приложениями пользуются не только в повседневной жизни. Андроид может быть в телевизоре, в машине, в планшете сотрудника банка или ещё хрен знает где.
    Ответ написан 17 окт. 2020
    Комментировать
    Нравится 1 Комментировать
  • Как переписать этот код на использование корутин в котлине?

    koperagen @koperagen
    Привет. Зависит от того, что тебе нужно сделать. Если просто хочешь завернуть результат suspend функции в CompletableFuture, то тебе поможет адаптер https://github.com/Kotlin/kotlinx.coroutines/tree/...
    Но в kotlinx.coroutines есть свой примитив для этого, Defered. С ним код будет выглядеть так
    result = async {
        myService.getInfo()
    }

    Если вопрос именно про переписывание, то поделись информацией о том что ты вообще делаешь, как используешь в своем коде этот CompletableFuture.
    Ответ написан 13 окт. 2020
    2 комментария
    Нравится 2 комментария
  • Как лучше сократить код return на Java?

    koperagen @koperagen
    Условие "две стороны параллельны, другие две - нет" похоже на оператор xor
    Для него таблица истинности
    1 1 -> 0
    1 0 -> 1
    0 1 -> 1
    0 0 -> 0
    Т.е. можно записать так
    isSidesParallel(sideAb, sideCd) ^ isSidesParallel(sideBc, sideDa)
    (^ - это xor в джаве)
    Ответ написан 22 авг. 2020
    2 комментария
    Нравится 3 2 комментария
  • Как post-запрос на postman перенести в kotlin?

    koperagen @koperagen
    Я правильно понимаю, что ты хочешь из программы на Kotlin сделать запрос к серверу, аналогичный запросу в Postman? Если да, то берешь какой-то HTTP клиент и пишешь запрос руками. Вот например - https://khttp.readthedocs.io/en/latest/ мимикрирует под питоновский Requests
    Если нет, уточни вопрос плиз. А то из вопроса не понятен контекст, может там постман умеет в какую-то кодогенерацию или ещё что-то умное
    Ответ написан 20 авг. 2020
    Комментировать
    Нравится Комментировать
  • Почему появляется эта ошибка?

    koperagen @koperagen
    Это не ошибки, а предупреждения. Они никак на работе вашей программы не скажутся.
    Если интересно, о чем предупреждения, то вкратце - библиотека, которую вы используете, под капотом использует другую библиотеку - Guice. Вот этот Guice обращается к внутреннему API JDK, JDK в ответ на такое вторжение в свои личные границы выдает предупреждение.
    Ответ написан 19 авг. 2020
    Комментировать
    Нравится Комментировать
  • Как работает нисходящее преобразование в Java?

    koperagen @koperagen
    При преобразованиях меняется только тип ссылки, которая ссылается на объект в памяти. Сам он навсегда остается того же типа, что при создании
    Ответ написан 06 авг. 2020
    1 комментарий
    Нравится 3 1 комментарий
  • Как перейти на разработку под андроид?

    koperagen @koperagen
    Попробуй начать с Codelabs. В них проходят по всем современным практикам разработки приложений
    https://developer.android.com/courses/kotlin-andro...
    https://developer.android.com/courses/kotlin-andro...
    Если понравится такой формат, то их там кроме этих курсов ещё не один десяток, но уже более конкретные. Например, по Material Design'у, работе с корутинами или MotionLayout'ом
    Ответ написан 03 авг. 2020
    Комментировать
    Нравится 1 Комментировать
  • Как максимизировать сумму элементов выбираемых из списка?

    koperagen @koperagen
    Нужно создать дополнительный список B и заполнить его так, чтобы в ячейке B[I] находилась максимальная возможная сумма элементов A[0..I]
    Если список состоит из 1 элемента, то ответом будет сам элемент
    Если 2 элемента, то для I=1 это будет max(B[0], А[1])
    Если 3 элемента, а K = 1, то для I=2 ответ будет max(B[1], A[2] + B[0])
    Ответ написан 10 июл. 2020
    Комментировать
    Нравится Комментировать
  • Почему коллекции в Kotlin урезаны?

    koperagen @koperagen
    Ответ в мультиплатформенности.
    Когда пишите на котлине под JVM, вы можете использовать весь набор Java коллекций. Картинка снизу какая-то не полная, как минимум на ней нет Map и MutableMap. Как максимум, раз уж у них java.util.HashSet реализует MutableSet, то и LinkedHashSet, TreeSet - тоже.
    Но вообще это не справедливо, если код компилируется под JS или Native.
    Ответ написан 05 июл. 2020
    Комментировать
    Нравится 3 Комментировать
  • Смысл ООП и ЧПУ?

    koperagen @koperagen
    На этот вопрос много раз тут отвечали, но чтобы действительно понять, нужно долго и упорно вникать. Предлагаю для начала посмотреть лекцию. В ней довольно доходчиво раскрывается ответ на вопрос "Зачем ООП", разница между парадигмами программирования, их плюсы, минусы, нюансы.
    Ну и если перед вами стоит задача написать программу, то пишите как умеете. Потом будет на что посмотреть, а накопившийся опыт подскажет, что можно было сделать иначе/лучше. Работающая программа лучше, чем не написанная
    Ответ написан 26 июн. 2020
    Комментировать
    Нравится 2 Комментировать
  • Как решить задачку на Kotlin?

    koperagen @koperagen
    Предполагая, что вы прочитали этот файл и сохранили в List, где DataObject это представление строки из этого файла, что-то вроде data class DataObject(val n: Int, val item: String, val date: String), код можно написать примерно так
    val representation = list
      .sortedBy { it.n }
      .map { it.item }
      .dropLast(5)
      .joinToString("\n")
    println(representation)

    Собственно из примера не очень понятно, что за файл и его формат. Вроде похоже на CSV с 3 столбцами, тогда берем https://github.com/doyaaaaaken/kotlin-csv
    val file: File = File("test.csv")
      val rows: List<List<String>> = csvReader().readAll(file)
      val list: List<DataObject> = rows.map { (first, second, third) -> DataObject(first.toInt(), second, third) }

    Получаем нужный список с данными из таблицы.
    Ответ написан 15 июн. 2020
    1 комментарий
    Нравится 1 комментарий
  • Объясните что проиходит в блоке кода?

    koperagen @koperagen
    Эта запись аналогична
    takeIf { it.isNotEmpty() }
    Двоеточие в котлине означает получение ссылки на функцию/свойство. Строка List::isEmpty в частности возвращает ссылку типа (List<Int>) -> Boolean. У takeIf аргумент - это функциональный тип (T) -> Boolean, в данном случае List<Int> -> Boolean.
    Ответ написан 07 июн. 2020
    2 комментария
    Нравится 1 2 комментария
  • Как в kotlin правильно сделать кеширование свойств объекта?

    koperagen @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)
    }

    Ответ написан 31 мая 2020
    1 комментарий
    Нравится 1 комментарий
  • Как пишутся читы на MineCraft, CS:GO, Dota2 и другие игры?

    koperagen @koperagen
    Вот есть чит для CS:GO, написанный на kotline, JVM https://github.com/Jire/Charlatano.
    Думаю в исходном коде можно найти много интересного с целью изучения.
    Ответ написан 02 мая 2020
    Комментировать
    Нравится 1 Комментировать
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • Следующие →
Самые активные сегодня
  • Василий Банников
    • 10 ответов
    • 1 вопрос
  • Drno
    • 10 ответов
    • 0 вопросов
  • Lord_Dantes
    Lord_Dantes
    • 9 ответов
    • 0 вопросов
  • Дмитрий
    • 7 ответов
    • 0 вопросов
  • sergey-gornostaev
    Сергей Горностаев
    • 7 ответов
    • 0 вопросов
  • Андрей Ежгуров
    • 6 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации