Как стать автором
Обновить
8
0
Устинов Тихон @zhimbura

Разработчик в РТК ИТ

Отправить сообщение
package main

import "fmt"

type MyType struct {
	value string
}

func NewMyType() *MyType {
	println("create")
	return &MyType{}
}

func main() {
	myType := MyType{
		value: "F*ck constructor",
	}
	fmt.Println(myType.value)
}

Твой пример работает только если во всем проекты вызывается через этот синтетический конструктор, но если в каком либо проекте программисты почему-то решили так как не делать, то этот NewMyType чуть больше чем бесполезен

Не знаю есть ли смысл разводить холивар, уже не раз писал на эту тему.
По поводу когнитивной нагрузки, если сравнивать с тем же Kotlin то в Kotlin гораздо проще понять что делает метод ввиду того что если на Go не использовать самописные map, filter, any, all то приходится гораздо больше времени тратить чтобы понять что тот или иной for делает


По поводу отладки вообще другой разговор, когда во всех нормальных языках есть конструктор и я могу поставить точку остановки на вызов конструктора и найти где тот или иной объект был создан за один раз, то в Go это превращается в целое приключение если создание объекта есть в нескольких местах, а учитывая передачу по значению то вариации откуда пошел не тот объект становится еще больше

Или же я могу без проблем сделать getter setter в том же жаваскрипте, и опять же поставить точку остановки на установку значения, в Go опять я этого сделать не могу, если значения устанавливаются напрямую в объект.

С выполнением кода тоже есть вопросы, в отладке в Goland (когда я работал с Go) как то не очень работали функции которые возвращали несколько значений, и нельзя было на точке остановки постоять и выполнять код для проверки каких-либо данных

За плюсы ничего не говорю, сравниваю с JavaScript и Kotlin/Java/С#

Меня в Go больше всего смущает отношение разработчиков, что они не смогли (или не захотели) добавлять функциональность по типу filter, map и прочее, а разработчик с habr смог.

А где посмотреть можно? Хочу посмотреть исходный код проектов Яндекс

Дата всех файлов: 2022-02-24

Очень интересное совпадение, мне кажется это не взлом, а какая-то крыса внутри компании слила все к чему имела доступ

Я программист и тоже иногда использую plantuml, но есть у него огромный минус (для меня) - нельзя сместить элемент так как мне нужно

то переписать его на swift / java / js - задача аналогичная компетенциям KMM

А если нужно внести правки? Нужно будет 3 разработчика которые на 3-х проектах будут вносить правки, и не факт что они сделают их одинаково, покрыть тестами нужно так же на 3-х проектах.

в том числе по стоимости поддержки

Чтобы было понятно у нас команда из 3-х человек на SDK, при этом SDK использует 7 проектов. Если предположить что чтобы это все сделать нужно по 3 человека на каждый проект то получается без SDK нужно было бы 21 разработчик.

А при использовании KMM, если кто-то будет сопровождать Game framework из примера, то ему придётся производить тестирование на N-платформ(языков)

При нахождении бага на одном из проекта, баг правится на командой SDK и там же покрывается тестами под платформы. Выкатывается новая версия и остальные проекты по своему жизненному циклу переходят на нее (с оговорками, по версиям так же есть семантическое разделение версий и все оттуда вытекающее). И получается 1 разработчик может исправить проблему на 7 проектах на разных языках.

Так же формат данных между этими проектами тоже единый, введение новых фич одинаково для всех.

Так что на счет минусов не уверен, и мое мнение что плюсы значительно их превышают.

Если проект "крестики-нолики" то конечно нет смысла тянуть мультиплатформу, но если у вас крупный enterprise проект со сложной логикой - то это просто must have.

Затем вы в пример приводите приложение без бекенда =)

Ничего мне не мешает добавить полученную логику и на какой нибудь back-end, обернуть это работой с клиентами и будет back-endрешение.

Нужно понимать разницу в cross platform vs multiplatform.

Я рассказывал о kotlin multiplatfrom с точки зрения разработки библиотеки которую можно переиспользовать на множестве платформ. View в данном случае только лишь для наглядности.

в вашем примере всё можно сделать на flutter

Сделать можно было на чем угодно, но это была бы уже другая тема статьи.


Если быть конкретно в своей работе наша команда пишет ядро логики на kotlin multplatfrom и отдает SDK как продукт, и этот SDK наши пользователи могут добавить себе в приложение любой технологии которая может обработать такими языками как js, java, swift. Имея при это большой набор существующих для kotlin библиотеки и инструментов. Flutter для этого вообще не подходит, более менее можно писать на Dart и компилировать под разные платформы. Но имея команду Java разработчиков выбор был сделан в пользу Kotlin.

И поэтому в статье Kotlin, а не Dart / Flutter.



В вашей статье всё можно сделать на flutter + любой бекенд

Зачем мне бекенд когда он не нужен?

Моб приложение с северной логикой это тонкий/толстый клиент, который рисует только экраны

Не всегда, иногда удобнее сделать какой-нибудь конструктор чего-нибудь на клиенте, как минимум для вариантов с offline режимом

или зачем на бекенде логика клиента, там же принципиально разные концепции,и всё равно придётся заботиться о синхронизации

Как я и написал эту статью чтобы показать что иногда логики могут пересекаться, и что с помощью данной технологии проблему синхронизации можно избежать

По поводу автоматизации, а тесты ios как запускаете, учитывая что для запуска ios приложения нужно устройство Apple? Руками или используете какое-то автоматическое решение?

Как минимум

еще один WebView


- легче дебажить так как присутствует типизация в отличии от html + js
- нативный код упрощает работу с api системы
- это быстрее работает

Так что технология точно имеет право на жизнь по моему мнению.

Очень похожую идею реализует jasonette. Рассматривали ли вы эту технологию и чем она вам не подошла?

Да нужно обращать внимание на то в какие базовые типы будет скомпилирован код, и тестировать на всех платформах.

Крестики нолики лишь максимально простой пример, на деле же в реальных проектах строчек кода в десятки раз больше, и тогда вопрос дублирования кода становится действительно актуальным

Все прошло достаточно гладко, но экспертиза понадобилась. Речь идет и о том, и о том, так как иногда приходится решать вопросы на стыке всех языков, под которые мы компилируем. Например, обычный тип Array на JS это нативный массив, а на Swift это экземпляр класса KotlinArray. Или если у вас есть асинхронность то, чтобы сделать доступный ваш метод на всех целевых платформах, нужно хотя бы малейшее понимание асинхронности на платформах, где вы хотите вызвать этот асинхронный метод. Например, в Kotlin это условный suspend метод, а в JS это нужно превратить в Promise а в Java в Future. Это все решаемо и есть официальные чаты в телеграмм которые могут помочь разобраться с возникшими проблемами, но понятно что если будут знания целевых платформ то разработка будет на много легче.

По поводу написания приложения, на сколько я понимаю, чтобы написать приложение только на Kotlin тебе нужно так же интерфейс писать с помощью Kotlin, и такой инструмент есть называется Compose Multiplatform, и ты можешь с его помощью создать интерфейс на Kotlin и запустить это на Android, но это не работает с iOS, под iOS тебе все равно придется делать интерфейс средствами разработки под iOS и как то заставить их работать вместе, что-то подобное было описано тут Как использовать Kotlin Multiplatform ViewModel в SwiftUI и Jetpack Compose. Если односложный ответ, то нет, нельзя.

JetBrains не блокируют аккаунты, по крайней мере у меня ничего не блокировали

Лицензией IDE можно пользоваться, не будет работать только обновление на новые версии после окончания лицензии, старая версия продолжит работать по их заявлению
Сам Kotlin вместе с Kotlin Multiplatfrom open source

Так что проблем с использованием возникнуть не должно, а открывать холовар о политике не вижу смысла

Наконец-то кто-то это сделал. Полностью согласен с автором по поводу Go.
Не так давно приходилось переключаться с Kotlin проекта на Go проект. И чтобы найти в Go проекте где создается объект и как там получились некоторые значения пришлось потратить достаточно много времени, так как конструктора у объекта нет, создавался он в множестве мест и поля при этом при создании объекта не заполнялись.
В нормальных языках я обычно ставил точку остановки на конструктор с условием на нужные мне данные, или оборачивал нужную переменную сеттером и быстро находил откуда объект и как он принял такое состояние.

Подскажите пожалуйста, могут ли статьи основной технологией на Kotlin и косвенно затрагивающий Java участвовать в данном конкурсе? Ведь на сколько мы знаем Java и Kotlin на 100% совместимы

Информация

В рейтинге
Не участвует
Откуда
Краснодар, Краснодарский край, Россия
Дата рождения
Зарегистрирован
Активность