В чем отличие между статической/динамической типизацией и явной/неявной?
если идти по определениям, то явная типизация это, когда мы явно задаем тип переменной при ее иницализации, и неявная это соотвественно var, let и тд. Далее статическая типизация, это когда типы переменных определяются на этапе компиляции, а динамическая в райнтайме. Скажите как по мне, это одинаковые штуки, если явно задаем тип, это и есть статическая типизация, если неявная это let, var и уже интепретатор сам определяет тип переменной по ходу выполнения. И бывает ли явная динамическая и неявная статическая?
Евгений Ромашкан, нет, конечно же это принципиально. В котлине статическая типизация. get из мапы вернёт вполне определенный тип, с выводом которого компилятор прекрасно справится.
Евгений Ромашкан, Оно возвращает конкретный тип Any, никакого "без типов" в котлине нет. И так никто не делает, нормальные парсеры парсят в нормальные объекты.
То что ты явно указал, называется приведением типов.
Евгений Ромашкан, что за бред, какая ещё таблица? Any это предок всех типов, и это вовсе не то же самое, что "без типов" и " нельзя вывести".
Нельзя вывести, это если ты напишешь вот так
val x = { y -> y }
Типы х и у ниоткуда не следуют, их именно что нельзя вывести, и нужно явно указать либо x: (Int) -> Int, либо у: Int. Иначе будет ошибка компиляции.
Если ты написал
val map = mapOf(1 to 2, "1" to "2")
val one = map["1"]
И ожидаешь, что one будет выведен в String, а когда это не случается, one закономерно выводится в Any(ближайший общий предок), и ты говоришь "тип не смогли вывести", или "получилась мапа без типов", то в таком случае ты не прав.
Евгений Ромашкан, Чувак, ты бредишь. Any это Object из Java или NSObject из Objective-C. Ты можешь его инстанс создать. val x = Any(). И можешь методы у него позвать, например, toString и hashCode. И скастить его к чему-то ты не сможешь, потому что это инстанс Any.
И что ещё может быть предком типов, если не тип? О_о магический выхухоль, что ли?
Занимаемся мы тут двумя разными вещами - ты несёшь чушь, а я пытаюсь кого-то просветить.
Для правильного вопроса надо знать половину ответа
Явная типизация - это вариант статической типизации, при котором требуется явно объявлять типы переменных. При неявной статической типизации решение о типе принимается компилятором на основе размещаемых в переменной данных без явного указания типа (auto в C++).
если явно задаем тип, это и есть статическая типизация
Как раз таки для объектов, у которых есть предки и потомки, динамическая типизация во время выполнения будет решать, какой виртуальный метод вызвать, несмотря на то, что класс был указан заранее.