0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: kotlin, smart casts</p>
1
<p>Теги: kotlin, smart casts</p>
2
<p>В этой заметке поговорим про<strong>Smart casts</strong>или "умные" преобразования.</p>
2
<p>В этой заметке поговорим про<strong>Smart casts</strong>или "умные" преобразования.</p>
3
<p>При некоторых обстоятельствах можно проверить, существуют ли у<strong>nullable</strong>-типа какое-нибудь значение, кроме<strong>null</strong>. Если да, то появляется возможность использовать переменную так, как будто она не является null:</p>
3
<p>При некоторых обстоятельствах можно проверить, существуют ли у<strong>nullable</strong>-типа какое-нибудь значение, кроме<strong>null</strong>. Если да, то появляется возможность использовать переменную так, как будто она не является null:</p>
4
<p>Из кода видно, что при использовании nullable-значения<strong>authorName</strong>отсутствуют восклицательные знаки. Такое использование nullable-проверок -- это пример<strong>smart cast</strong>либо умного преобразования типов.</p>
4
<p>Из кода видно, что при использовании nullable-значения<strong>authorName</strong>отсутствуют восклицательные знаки. Такое использование nullable-проверок -- это пример<strong>smart cast</strong>либо умного преобразования типов.</p>
5
<p>Когда nullable-переменная содержит значение, то if-выражение выполняет 1-й блок кода, где Kotlin умным образом преобразует<strong>authorName</strong>к стандартному не-null типу String. Если же nullable-переменная не содержит значения (null), то выражение<strong>if</strong>будет выполнять блок<strong>else</strong>.</p>
5
<p>Когда nullable-переменная содержит значение, то if-выражение выполняет 1-й блок кода, где Kotlin умным образом преобразует<strong>authorName</strong>к стандартному не-null типу String. Если же nullable-переменная не содержит значения (null), то выражение<strong>if</strong>будет выполнять блок<strong>else</strong>.</p>
6
<p>Следует отметить, что применение smart cast считается более безопасным, чем утверждение не-null значения посредством оператора !!. При этом лучше задействовать smart cast всегда, когда у nullable-типа значение может быть null. Ну а утверждение не-null значения подойдет лишь в одном случае --<strong>когда nullable гарантированно содержит значение</strong>.</p>
6
<p>Следует отметить, что применение smart cast считается более безопасным, чем утверждение не-null значения посредством оператора !!. При этом лучше задействовать smart cast всегда, когда у nullable-типа значение может быть null. Ну а утверждение не-null значения подойдет лишь в одном случае --<strong>когда nullable гарантированно содержит значение</strong>.</p>
7
<p>Кроме вышесказанного, применение smart cast будет полезным, когда nullable проверен и не будет после этого меняться. Например, когда nullable присваивается переменной, неизменяемой как после<strong>умного преобразования</strong>, так и перед использованием либо после присвоения константе.</p>
7
<p>Кроме вышесказанного, применение smart cast будет полезным, когда nullable проверен и не будет после этого меняться. Например, когда nullable присваивается переменной, неизменяемой как после<strong>умного преобразования</strong>, так и перед использованием либо после присвоения константе.</p>
8
<p>Собственно говоря, знание этих нюансов позволит вам безопасно заглядывать внутрь nullable-типа и извлекать значения, если они там присутствуют.</p>
8
<p>Собственно говоря, знание этих нюансов позволит вам безопасно заглядывать внутрь nullable-типа и извлекать значения, если они там присутствуют.</p>
9
<p><em>По материалам https://kotlins.org/null.</em></p>
9
<p><em>По материалам https://kotlins.org/null.</em></p>
10
10