<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: InsanusMokrassar</title>
    <description>The latest articles on DEV Community by InsanusMokrassar (@insanusmokrassar).</description>
    <link>https://dev.to/insanusmokrassar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F528442%2Feb325796-401d-4535-a598-9312aa4cd9c8.png</url>
      <title>DEV Community: InsanusMokrassar</title>
      <link>https://dev.to/insanusmokrassar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/insanusmokrassar"/>
    <language>en</language>
    <item>
      <title>Hello</title>
      <dc:creator>InsanusMokrassar</dc:creator>
      <pubDate>Mon, 18 Jan 2021 18:58:23 +0000</pubDate>
      <link>https://dev.to/insanusmokrassar/hello-146a</link>
      <guid>https://dev.to/insanusmokrassar/hello-146a</guid>
      <description>&lt;p&gt;Hello :)&lt;/p&gt;

&lt;p&gt;Who am I?&lt;/p&gt;

&lt;p&gt;I am a developer who extremely loves technologies I am using. Currently, it is Kotlin with its environment (serialization, coroutines, ktor, multiplatform, etc.), docker, linux (preferably elementary os on my laptop).&lt;br&gt;
I am a person who has created his own Jenkins image 'cause some time ago I was using Raspberry PI to host it (😔).&lt;br&gt;
I am a person who has got a Bachelor degree in Omsk State university and was lucky enough to get a Master degree in Wuhan University (both related to CS). The environment of the last one has pushed me to investigate linux servers, VPNs, proxies and different other topics.&lt;br&gt;
I am a person, who has created several interesting (imho) projects like tgbotapi, krontab or microutils (and some others); worked with different layers of applications like server-side (hello, Ktor and Spring 😊), desktop (SDL long time ago, JavaFX when it was included in JDK and TornadoFX mostly when JavaFX was excluded), Android (that time when I was using AlarmManager (instead WorkManager as for now), manual setting up of codes for getting a result in activities and different other things).&lt;/p&gt;

&lt;p&gt;Thank you for your interest:) I am a person, who is in love with the work he does and I hope it will never change.&lt;/p&gt;

&lt;p&gt;P. S. I hope, you love the things you are doing too :)&lt;/p&gt;

</description>
      <category>welcome</category>
      <category>kotlin</category>
    </item>
    <item>
      <title>About sealed classes in Kotlin</title>
      <dc:creator>InsanusMokrassar</dc:creator>
      <pubDate>Thu, 17 Dec 2020 11:11:21 +0000</pubDate>
      <link>https://dev.to/insanusmokrassar/about-sealed-classes-2ofc</link>
      <guid>https://dev.to/insanusmokrassar/about-sealed-classes-2ofc</guid>
      <description>&lt;p&gt;In this article I wish to say two words about &lt;a href="https://kotlinlang.org/docs/reference/sealed-classes.html"&gt;sealed classes&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;Sealed classes are &lt;code&gt;abstract&lt;/code&gt; classes with limited number of subclasses. You may get it with code like next:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;sealed&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Example&lt;/span&gt;

&lt;span class="kd"&gt;object&lt;/span&gt; &lt;span class="nc"&gt;ExampleObject&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Example&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ExampleSubclass&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Example&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Advantages
&lt;/h2&gt;

&lt;p&gt;Kotlin compiler always know all subclasses of &lt;code&gt;sealed&lt;/code&gt; class and it give several advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can use expression &lt;code&gt;val result = when (something)&lt;/code&gt; with enumeration of all types with &lt;code&gt;is Something&lt;/code&gt; and it will be checked by compiler:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;sealed&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Example&lt;/span&gt;

&lt;span class="kd"&gt;object&lt;/span&gt; &lt;span class="nc"&gt;ExampleObject&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Example&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ExampleSubclass&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Example&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;exampleText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Hello, world!"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ...&lt;/span&gt;

&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;o&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ExampleSubclass&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;message&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nc"&gt;ExampleObject&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"Just object :)"&lt;/span&gt;
    &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nc"&gt;ExampleSubclass&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exampleText&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;You are still using classes with all their opportunities: you can implement in it interfaces, add different fields and logic&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Disadvantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You may not extend sealed class outside of place this sealed class has been defined&lt;/li&gt;
&lt;li&gt;Due to the word &lt;code&gt;class&lt;/code&gt; in this feature name you will be unable to extend several sealed classes. (I am waiting for &lt;a href="https://youtrack.jetbrains.com/issue/KT-20423"&gt;&lt;code&gt;sealed interface&lt;/code&gt;s&lt;/a&gt; a lot :) )&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kotlin</category>
      <category>shortpost</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Kotlin Typealiases</title>
      <dc:creator>InsanusMokrassar</dc:creator>
      <pubDate>Sun, 13 Dec 2020 05:20:04 +0000</pubDate>
      <link>https://dev.to/insanusmokrassar/kotlin-typealiases-15mj</link>
      <guid>https://dev.to/insanusmokrassar/kotlin-typealiases-15mj</guid>
      <description>&lt;p&gt;Hi! As a developer on Kotlin, I usually use &lt;code&gt;typealias&lt;/code&gt; functionality and I wish to share my experience with you :)&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;Typealiases (like inline classes) are the types which will be erased in runtime, but are available in coding. Compiler will use their type value to put on places in code where this typealias are called.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Defining of types meaning&lt;/li&gt;
&lt;li&gt;Zero-cost in runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Disadvantages
&lt;/h2&gt;

&lt;p&gt;(Almost) absent typecheck. If you will use opposite by meaning and equal by type typaliases, compiler will not stop you&lt;/p&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;typealias&lt;/span&gt; &lt;span class="nc"&gt;XY&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Pair&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Float&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;typealias&lt;/span&gt; &lt;span class="nc"&gt;AbsoluteXY&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;XY&lt;/span&gt;

&lt;span class="err"&gt;…&lt;/span&gt;

&lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;AbsoluteXY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;…&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example we used &lt;code&gt;AbsoluteXY&lt;/code&gt; typealias to define that function &lt;code&gt;draw&lt;/code&gt; accept absolute coords instead of relative or something else.&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>shortpost</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
