HTML Diff
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