Ċ import Ġlink . kotlin . scripts . Article Ċ import Ġlink . kotlin . scripts . Link Type .* Ċ import Ġlink . kotlin . scripts . Language Codes .* Ċ import Ġjava . time . LocalDate Ċ Ċ // Ġlanguage = Markdown Ċ val Ġbody Ġ= Ġ""" Ċ It âĢĻ s Ġbeen Ġa Ġlong Ġtime Ġsince ĠI âĢĻ ve Ġupdated Ġthis Ġblog . ĠOver Ġthe Ġyear ĠI âĢĻ ve Ġmoved Ġaway Ġfrom ĠScala Ġas Ġmy Ġpreferred Ġlanguage Ġand Ġtowards ĠKotlin . ĠI âĢĻ ve Ġfound ĠKotlin Ġa Ġrefresh ing Ġapproach Ġas Ġits Ġborrow ed Ġa Ġlot Ġof Ġthe Ġgood Ġthings ĠI Ġlik ed Ġabout ĠScala Ġbut Ġkept Ġit Ġsimple Ġand Ġpractical Ġby Ġavoid ing Ġa Ġlot Ġof Ġthe Ġgot ch as Ġand Ġamb iguity Ġthat Ġcan Ġexist Ġin ĠScala . Ċ Ċ Here Ġis Ġa Ġcollection Ġof Ġthings ĠI Ġlike Ġabout ĠScala Ġand ĠKotlin Ġand Ġalso Ġa Ġcomparison Ġof Ġhow Ġthese Ġfeatures Ġare Ġaccomp lished Ġin Ġeach Ġlanguage . Ċ Ċ ## ĠType ĠDeclaration Ġand ĠInference Ċ Ċ Something ĠI Ġlove Ġabout Ġboth Ġthese Ġlanguages Ġis Ġthey Ġboth Ġhave Ġstatic Ġtyping Ġwith Ġtype Ġinference . ĠThis Ġgives Ġyou Ġthe Ġpower Ġof Ġcompile Ġtime Ġtype Ġchecking Ġwith Ġout Ġthe Ġdecl arative Ġbo iler Ġplate . ĠLarge ly Ġit Ġworks Ġthe Ġsame Ġin Ġboth Ġlanguages . ĠBoth Ġlanguages Ġalso Ġhave Ġpreference Ġto Ġimmutable Ġtype Ġdeclaration Ġas Ġwell Ġwith Ġthe Ġoptional Ġtype Ġdeclaration Ġbeing Ġplaced Ġafter Ġthe Ġvariable Ġname . Ċ Ċ Example , Ġthe Ġbelow Ġcode Ġis Ġthe Ġsame Ġin Ġboth Ġlanguages : Ċ Ċ Declare Ġa Ġimmutable Ġvariable Ġnamed Ġage Ġof Ġtype ĠInt : Ċ Ċ ``` kotlin Ċ val Ġage Ġ= Ġ 1 Ċ ``` Ċ Ċ Declare Ġa Ġmutable Ġvariable Âł of Ġtype ĠString : Ċ Ċ ``` kotlin Ċ var Ġg reeting Ġ= Ġ" Hello " Ċ ``` Ċ Ċ Both Ġlanguages Ġsupport Ġlambda Ġfunctions Ġas Ġfirst Ġclass Ġcit iz ens Ġthat Ġcan Ġbe Ġassigned Ġto Ġvariables Ġor Âł passed Ġas Ġfunction Ġparameters . Ċ Ċ Scala : Ċ Ċ ``` scala Ċ val Ġdouble Ġ= Ġ( i : ĠInt ) Ġ=> Ġ{ Ġi Ġ* Ġ 2 Ġ} Ċ ``` Ċ Ċ Kotlin : Ċ Ċ ``` kotlin Ċ val Ġdouble Ġ= Ġ{ i : ĠInt Ġ-> Ġi Ġ* Ġ 2 } Ċ ``` Ċ Ċ ## ĠData Âł / Âł Case ĠClass Ċ Ċ Both ĠScala Ġand ĠKotlin Ġhave Ġa Ġsimilar Ġconcept Ġof Ġa Ġdata Ġclass Ġwhich Ġcan Ġbe Ġuse Ġto Ġrepresent Ġa Ġdata Ġmodel Ġobject . Ċ Ċ ### ĠScala âĢĻ s ĠAppro ach Ċ Ċ Scala Ġcalls Ġthis Ġa Ġcase Ġclass Ġand Ġit Ġcan Ġbe Ġdefined Ġlike : Ċ Ċ ``` scala Ċ case Ġclass ĠPerson ( name : ĠString , Ġage : ĠInt ) Ċ ``` Ċ Ċ This Ġgives Ġyou Ġthe Ġfollowing Ġmain Ġadv antages Ġover Ġa Ġnormal Ġclass : Ċ Ċ * ĠHas Ġan Ġapply Ġmethod Ġ( You Ġdon âĢĻ t Ġneed Ġto Ġuse Ġthe ĠâĢĺ new âĢĻ Ġword Ġto Ġconstruct Ġinstances ) Ċ * ĠAccess or Ġmethods Ġare Ġdefined Ġfor Ġeach Ġproperty Ġ( If Ġproperty Ġare Ġdefined Ġas Ġvar Ġthen Ġset ters Ġare Ġalso Ġdefined ) Ċ * ĠtoString , Âł equal Ġand ĠhashCode Ġis Ġsens ibly Ġdefined Ċ * Ġcopy Ġfunction Ċ * ĠHas Ġan Ġun apply Ġmethod Ġ( which Ġallows Ġuse Ġin Ġmatch Ġexpressions ) Ċ Ċ ### ĠKotlin âĢĻ s ĠAppro ach Ċ Ċ Kotlin Ġcalls Ġthis Ġa Ġdata Ġclass Ġand Ġit âĢĻ s Ġdefined Ġlike : Ċ Ċ ``` kotlin Ċ data Ġclass ĠPerson ( val Ġname : ĠString , Ġval Ġage : ĠInt ) Ċ ``` Ċ Ċ Key ĠFeatures Ċ Ċ * ĠAccess or Ġmethods Ġare Ġdefined Ġfor Ġeach Ġproperty Ġ( If Ġproperty Ġare Ġdefined Ġas Ġvar Ġthen Ġset ters Ġare Ġalso Ġdefined ). ĠThis Ġis Ġnot Ġunique Ġto Ġdata Ġclass Ġand Ġworks Âł on Ġany Ġclass Ġin ĠKotlin . Ċ * ĠS ens ibly Ġdefined ĠtoString , Ġequal Ġand ĠhashCode Ċ * Ġcopy Ġfunction Ċ * Ġcomponent 1 .. component N Ġfunctions . ĠSimilar Ġuse Ġto Ġun apply . Ċ * ĠImplements ĠJava Bean Ġgetter Ġand Ġset ters Ġdefined Ġso Ġnative ĠJava Ġframeworks Ġ( Hibernate , ĠJack son ) Ġwithout Ġchange Ċ Ċ Kotlin Ġdoesn âĢĻ t Ġneed Ġa Ġspecial ĠâĢĺ apply âĢĻ Ġmethod Ġas Ġit Ġdoesn âĢĻ t Ġrequire Ġa ĠâĢĺ new âĢĻ Ġkeyword Ġto Ġinstantiate Ġclass Ġconstructors . ĠSo Ġthis Ġis Ġa Ġstandard Ġconstructor Ġdefinition Ġlike Ġany Ġother Ġclass . Ċ Ċ ### ĠComparison Ċ Ċ Gener ally Ġdata Ġand Ġcase Ġclasses Ġare Ġsimilar . Ċ Ċ This Âł example Ġusage Ġworks Ġthe Ġsame Ġin ĠKotlin Ġor ĠScala : Ċ Ċ ``` kotlin Ċ val Ġj ack Ġ= ĠPerson (" Jack ", Ġ 1 ) Ċ val Ġolder Jack Ġ= Ġj ack . copy ( age Ġ= Ġ 2 ) Ċ ``` Ċ Ċ Gener ally ĠI âĢĻ ve Ġfound Ġdata Ġand Ġcase Ġclasses Âł inter change able Ġin Ġday Ġto Ġday Ġuse . ĠKotlin Ġdoes Ġenforce Ġsome Ġrestriction Ġon Ġextending Ġa Ġdata Ġclass Ġwith Ġinheritance Ġbut Ġits Ġdone Ġfor Ġgood Ġreasons Ġwhen Ġyou Ġconsider Ġthe Ġimplementations Ġof Ġequals Ġand Ġcomponent N Ġfunctions Ġand Ġprevents Ġthe Ġgot cha Ġmoment s . Ċ Ċ The ĠScala Ġcase Ġclasses Ġcan Ġbe Ġmore Âł power ful Ġin Ġa Ġmatch Ġstatements Ġcompared Ġto ĠKotlin âĢĻ s Ġhandling Ġof Ġdata Ġclasses Ġin ĠâĢĺ when âĢĻ Ġstatements Âł which Ġis Ġsomething ĠI Ġmiss . Ċ Ċ Kotlin Ġapproach Ġworks Ġa Ġlot Ġbetter Ġwhen Ġbeing Ġused Ġfrom Ġexisting ĠJava Ġframeworks Ġas Ġit Ġwill Ġlook Ġlike Ġa Ġnormal Ġjava Ġbean . Ċ Ċ Both Ġlanguages Ġsupport Ġsupply ing Ġparameters Ġby Ġname Ġand Ġallow Ġfor Ġdefault Ġvalues . Ċ Ċ ## ĠNull ĠS afety Ġ/ ĠOptional ity Ċ Ċ ### ĠScala âĢĻ s ĠAppro ach Ċ Ċ Scala âĢĻ s Ġapproach Ġto Ġnull Ġsafety Ġis Ġthe Ġoption Ġmon ad . ĠSimply Âł an Ġoption Ġcan Ġbe Ġone Ġof Ġtwo Ġconcrete Ġtypes ; ĠSome ( x ) Ġor ĠNone . Ċ Ċ ``` scala Ċ val Ġan Option Int : ĠOption [ Int ] Ġ= ĠSome ( 1 ) Ċ ``` Ċ Ċ OR Ċ Ċ ``` scala Ċ val Ġan Option Int : ĠOption [ Int ] Ġ= ĠNone Ċ ``` Ċ Ċ You Ġcan Ġoperate Ġon Ġthe Ġoption Ġusing Ġfunctions Ġon Ġthe Ġoption Ġclass Ġlike ĠâĢľ isDefined âĢĿ Ġand ĠâĢľ getOrElse âĢĿ Ġ( to Ġprovide Ġa Ġdefault Ġvalue ) Ġbut Ġmore Ġcommonly Âł you Ġwould Ġuse Ġmon ad Ġoperations Ġlike Ġmap , Ġforeach Ġor Ġfold Ġwhich Ġwill Ġtreat Ġthe Ġoption Ġas Ġa Ġcollection Ġcontaining Ġ 0 Ġor Ġ 1 Ġelements . Ċ Ċ For Ġexample Ġto Ġsum Ġtwo ĠOptionally Ġdefined ĠIn ts Ġyou Ġcould Ġdo : Ċ Ċ ``` scala Ċ val Ġn 1 Option : ĠOption [ Int ] Ġ= ĠSome ( 1 ) Ċ val Ġn 2 Option : ĠOption [ Int ] Ġ= ĠSome ( 2 ) Ċ val Ġsum Ġ= Ġfor Ġ( n 1 Ġ<- Ġn 1 Option ; Ġn 2 Ġ<- Ġn 2 Option ) Ġyield Ġ{ Ġn 1 Ġ+ Ġn 2 Ġ} Ċ ``` Ċ Ċ The Ġvariable Ġsum Âł will Ġhave Ġthe Ġvalue ĠSome ( 3 ). ĠThis Ġis Ġlever aging ĠScala âĢĻ s Ġfor Ġcompreh ension Ġwhich Ġcan Ġbe Ġforeach Ġor Ġa Ġflat Ġmap Ġfunction Ġdepending Ġon Ġthe Ġuse Ġof Ġthe Ġyield Ġkeyword . Ċ Ċ Another Ġexample Ġof Ġchaining Ġcould Ġbe : Ċ Ċ ``` scala Ċ case Ġclass ĠPerson ( name : ĠString , Ġage : ĠOption [ Int ]) Ċ val Ġperson : Option [ Person ] Ġ= ĠSome ( Person (" Jack ", Some ( 1 ))) Ċ for Ġ( p Ġ<- Ġperson ; Ġage Ġ<- Ġp . age ) Ġ{ Ċ Ġprintln ( s " The Ġperson Ġis Ġa ged Ġ${ "$ "} age ") Ċ } Ċ ``` Ċ Ċ This Ġwill Ġprint ĠâĢľ The Ġperson Ġis Ġa ged Ġ 1 âĢĿ Ċ Ċ ### ĠKotlin âĢĻ s ĠAppro ach Ċ Ċ Kotlin âĢĻ s Ġapproach Ġbor rows Ġfrom Ġgro ovy Ġstyle Ġsyntax Ġand Ġis Ġvery Ġpractical Ġin Ġevery Ġday Ġuse . ĠIn ĠKotlin Ġall Ġtypes Ġare Ġnon - nullable Ġand Ġmust Ġbe Ġexplicitly Ġdeclared Ġnullable Ġusing ĠâĢĺ ? âĢĻ Ġif Ġit Ġcan Ġcontain Ġnull . Ċ Ċ The Ġsame Ġexample Ġcould Ġbe Ġwritten Ċ Ċ ``` kotlin Ċ val Ġn 1 : ĠInt ? Ġ= Ġ 1 Ċ val Ġn 2 : ĠInt ? Ġ= Ġ 2 Ċ val Ġsum Ġ= Ġif Ġ( n 1 Ġ!= Ġnull Ġ&& Ġn 2 Ġ!= Ġnull ) Ġn 1 Ġ+ Ġn 2 Ġelse Ġnull Ċ ``` Ċ Ċ This Ġis Ġmuch Ġcloser Ġto ĠJava Ġsyntax Ġexcept ĠKotlin Ġwill Ġenforce Ġcompile Ġtime Ġchecks Ġso Ġits Ġnot Ġpossible Ġto Ġuse Ġa Ġnullable Ġvariable Ġwithout Ġchecking Âł it Ġis Ġnot Ġnull Ġfirst Ġso Ġyou Ġwon âĢĻ t Ġfear ĠNull Pointer Exceptions . ĠIts Ġalso Ġnot Ġpossible Ġto Ġassign Ġa Ġnull Ġto Ġa Ġvariable Ġdeclared Ġas Ġnon - nullable . ĠThe Ġcompiler Ġis Ġquite Ġsmart Ġin Ġchecking Ġbranch Ġlogic Ġso Ġyou Ġdon âĢĻ t Ġhave Ġthe Ġsituation Ġof Ġover Ġgu arding Ġthat Ġyou Ġsee Ġin ĠJava Ġwhere Ġthe Ġsame Ġvariable Ġis Ġchecked Ġfor Ġnull Ġmultiple Ġtimes . Ċ Ċ An Âł e quivalent ĠKotlin Ġcode Ġfor Ġthe Ġsecond Ġexample Ġof Ġchaining Ġis : Ċ Ċ ``` kotlin Ċ data Ġclass ĠPerson ( val Ġname : ĠString , Ġval Ġage : ĠInt ?) Ċ val Ġperson : Person ? Ġ= ĠPerson (" Jack ", Ġ 1 ) Ċ if Ġ( person ?. age Ġ!= Ġnull ) Ġ{ ĊĠ Ġprintln (" The Ġperson Ġis Ġa ged Ġ${ " $" }{ person ?. age }") Ċ } Ċ ``` Ċ Ċ An Ġalternative Ġis Ġalso Ġavailable Ġusing ĠâĢľ let âĢĿ Ġwhich Ġcould Ġreplace Ġthe Ġif Ġblock Ġwith Ċ Ċ ``` kotlin Ċ person ?. age ?. let Ġ{ ĊĠ Ġprintln (" The Ġperson Ġis Ġa ged Ġ${ "$ "} it ") Ċ } Ċ ``` Ċ Ċ ## ĠComparison Ċ Ċ I Ġreally Ġprefer Ġthe ĠKotlin Ġapproach . ĠIt âĢĻ s Ġa Ġlot Ġeasier Ġto Ġread Ġand Ġunderstand Ġwhat âĢĻ s Ġgoing Ġon Ġand Ġmultiple Ġlevels Ġof Ġnesting Ġis Ġeasy Ġto Ġhandle . ĠThe Ġscala Ġapproach Ġhas Ġsym metry Ġin Ġthat Ġother Ġmon ads Ġcan Ġbe Ġact ed Ġon Ġthe Ġsame Ġas Ġoption Ġcan Ġ( e . g . Ġfutures ) Ġwhich Ġsome Ġpeople Ġlike Ġbut ĠI âĢĻ ve Ġfound Ġit Ġcan Ġget Ġcomplicated Ġreally Ġfast Ġonce Ġthere Ġis Ġa Ġlittle Ġbit Ġof Ġnesting . ĠThere Ġare Ġalso Ġa Ġlot Ġof Ġgot cha âĢĻ s Ġwith Ġfor Ġcompreh ension Ġas Ġunder Ġthe Ġcovers Ġthey Ġare Ġmaps Ġor Ġflat Ġmaps Ġbut Ġyou Ġdon âĢĻ t Ġget Ġthe Ġcompile Ġtime Ġwarnings Ġif Ġyou Ġdo Ġsomething Ġwrong Ġlike Ġmix Ġmon ads Ġor Ġdo Ġa Ġpattern Ġmatch Ġwithout Ġcover ing Ġalternative Ġpaths Ġwhich Ġleads Ġto Ġruntime Ġexceptions Ġthat Ġare Ġcrypt ic . Ċ Ċ Kotlin âĢĻ s Ġapproach Ġalso Ġb rid ges Ġthe Ġgap Ġwhen Ġintegr ating Ġwith ĠJava Ġcode Ġas Ġthey Ġcan Ġdefault Ġto Ġnullable Ġtypes Ġwhere Ġas ĠScala Ġstill Ġhas Ġto Ġsupport Ġnull Ġas Ġa Ġconcept Ġwithout Ġnull Ġsafety Ġprotection . Ċ Ċ ## ĠFunctional ĠCollections Ċ Ċ Scala Ġof Ġcourse Ġsupports Ġmany Ġfunctional Ġgood ies . Âł Kotlin Ġis Ġa Ġlittle Ġmore Ġrestrict ive Ġbut Ġthe Ġbasics Ġare Ġcovered . Ċ Ċ There Ġisn âĢĻ t Ġmuch Ġdifference Ġin Ġthe Ġbasic Ġfold Ġand Ġmap Ġfunctions . Ċ Ċ Scala Ċ Ċ ``` scala Ċ val Ġnumbers Ġ= Ġ 1 Ġto Ġ 1 0 Ċ val Ġdouble s Ġ= Ġnumbers . map Ġ{_ Ġ* Ġ 2 } Ċ val Ġsum Of S quares Ġ= Ġdouble s . fold ( 0 ) Ġ{_ Ġ+ Ġ_} Ċ ``` Ċ Ċ Kotlin Ċ Ċ ``` kotlin Ċ val Ġnumbers Ġ= Ġ 1 .. 1 0 Ċ val Ġdouble s Ġ= Ġnumbers . map Ġ{ it Ġ* Ġ 2 } Ċ val Ġsum Of S quares Ġ= Ġdouble s . fold ( 0 ) Ġ{ x , y Ġ-> Ġx + y } Ċ ``` Ċ Ċ Both Ġsupport Ġthe Ġconcept Ġof Ġlazy Ġevaluated Ġsequences . ĠFor Ġexample Ġprinting Ġfirst Ġ 1 0 Ġeven Ġsquares . Ċ Ċ Scala Ċ Ċ ``` scala Ċ val Ġnumbers Ġ= ĠStream . from ( 1 ) Ġ// Ġall Ġnatural Ġnumbers Ċ val Ġsquares Ġ= Ġnumbers . map Ġ{ x Ġ=> Ġx Ġ* Ġx } Ċ val Ġeven S quares Ġ= Ġsquares . filter Ġ{ _% 2 Ġ== Ġ 0 } Ċ println ( even S quares . take ( 1 0 ). toList ) Ċ ``` Ċ Ċ Kotlin Ċ Ċ ``` kotlin Ċ val Ġnumbers Ġ= Ġsequence ( 1 ) Ġ{ it Ġ+ Ġ 1 } Ġ// Ġall Ġnatural Ġnumbers Ċ val Ġsquares Ġ= Ġnumbers . map Ġ{ it Ġ* Ġit } Ċ val Ġeven S quares Ġ= Ġsquares . filter Ġ{ it % 2 Ġ== Ġ 0 } Ċ println ( even S quares . take ( 1 0 ). toList ()) Ċ ``` Ċ Ċ ## ĠImp lic its ĠConversion Ġvs ĠExtension ĠFunctions Ċ Ċ This Ġis Ġan Ġarea Ġwhere ĠScala Ġand ĠKotlin Ġdiv erge Ġa Ġlittle . Ċ Ċ ### ĠScala âĢĻ s ĠAppro ach Ċ Ċ Scala Âł has Ġa Ġa Ġconcept Ġof Ġimplicit Ġconversion Ġthat Ġallows Ġyou Ġto Ġadd Ġextra Ġbehaviour Ġto Ġa Ġclass Ġby Ġautomatically Ġconverting Ġto Ġanother Ġclass Ġwhen Ġneeded . ĠAn Ġexample Ġof Ġthis Ċ Ċ ``` scala Ċ object ĠHelpers Ġ{ Ċ Ġimplicit Ġclass ĠInt With Times ( x : ĠInt ) Ġ{ ĊĠĠ Ġdef Ġtimes [ A ]( f : Ġ=> ĠA ): ĠUnit Ġ= Ġ{ ĊĠĠĠ Ġfor Ġ( i Ġ<- Ġ 1 Ġto Ġx ) Ġ{ ĊĠĠĠĠ Ġf ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ Ġ} Ċ } Ċ ``` Ċ Ċ Then Ġlater Ġin Ġthe Ġcode Ġyou Ġcan Ġdo : Ċ Ċ ``` scala Ċ import ĠHelpers ._ Ċ 5 . times ( println (" Hello ")) Ċ ``` Ċ Ċ This Ġwill Ġprint ĠâĢľ Hello âĢĿ Ġ 5 Ġtimes . ĠHow Ġthis Ġworks Ġis Ġwhen Ġyou Ġtry Ġto Ġuse Ġthe ĠâĢľ times âĢĿ Ġfunction Ġwhich Ġdoesn âĢĻ t Ġexist Ġon Ġthe ĠInt Ġthe Ġobject Ġwill Ġbe Ġautomatically Ġbox ed Ġinto Ġan Âł Int With Times Ġobject Ġand Ġthe Ġtimes Ġfunction Ġwill Ġexecuted Ġon Ġthat . Ċ Ċ ### ĠKotlin âĢĻ s ĠAppro ach Ċ Ċ Kotlin Ġhas Ġthe Ġconcept Ġof Ġextension Ġfunctions Ġthat Ġcan Ġbe Ġused Ġto Ġaccomplish Ġa Ġsimilar Ġjob . ĠIn Ġthe ĠKotlin Ġapproach Ġyou Ġdefine Ġa Ġnormal Ġfunction Ġbut Ġprefix Ġthe Ġfunction Ġname Ġwith Ġa Ġtype Ġto Ġextend . Ċ Ċ ``` kotlin Ċ fun ĠInt . times ( f : Ġ() -> Unit ) Ġ{ ĊĠ Ġfor Ġ( i Ġin Ġ 1 .. this ) Ġ{ ĊĠĠĠ Ġf () ĊĠ Ġ} Ċ } ĊĠĊ 5 . times Ġ{ println (" Hello ")} Ċ ``` Ċ Ċ ### ĠComparison Ċ Ċ Kotlin Ġapproach Ġfits Ġthe Ġuse Ġcase Ġthat ĠI Ġgenerally Ġwould Ġuse Ġthis ĠScala Ġcapability Ġfor Ġand Ġhas Ġthe Ġadvantage Ġof Ġbeing Ġa Ġlittle Ġsimpler Ġto Ġunderstand . Ċ Ċ ## ĠScala ĠFeatures ĠNot ĠPresent Ġin ĠKotlin Ġthat ĠI Ġwon âĢĻ t ĠM iss Ċ Ċ One Ġof Ġthe Ġbest Ġpart Ġof Ġthe ĠKotlin Ġlanguage Ġfor Ġme Ġis Ġnot Ġthe Ġfeatures Ġit Ġhas Ġbut Ġmore Ġthe Ġfeatures Ġfrom ĠScala Ġthat Ġare Ġnot Ġin ĠKotlin Ċ Ċ * ĠCall Ġby Ġname ĠâĢĵ ĠThis Ġdest ro ys Ġread ability . ĠIf Ġa Ġfunction Ġis Ġbeing Ġpassed Ġits Ġa Ġlot Ġeasier Ġwhen Ġits Ġvisible Ġthat Ġits Ġa Ġfunction Ġpointer Ġin Ġa Ġbasic Ġreview Ġof Ġthe Ġcode . ĠI Ġdon âĢĻ t Ġsee Ġany Ġadvantage Ġthis Ġgives Ġover Ġpassing Ġexplicit Ġlamb das Ċ * ĠImp licit Ġparameters ĠâĢĵ ĠThis Ġis Ġsomething ĠI âĢĻ ve Ġreally Ġh ated . ĠIt Ġleads Ġto Ġsituation Ġof Ġcode Ġchanging Ġdr astic ally Ġbased Ġon Ġa Ġchange Ġof Ġimport Ġstatement . ĠIt Ġmakes Ġit Ġreally Ġhard Ġto Ġtell Ġwhat Ġvalues Ġwill Ġbe Ġpassed Ġto Ġa Ġfunction Ġwithout Ġgood ĠIDE Ġsupport Ċ * ĠOver loaded ĠFOR Âł comp reh ension ĠâĢĵ ĠTo Ġme Ġthis Ġis Ġa Ġcl unk Ġto Ġget Ġaround Ġthe Ġproblem Ġwith Ġdealing Ġwith Ġmultiple Ġmon ads Ċ * ĠThe Ġmess Ġwith Ġoptional Ġsyntax Ġon Ġin fix Ġand Ġpostfix Ġoperators ĠâĢĵ ĠKotlin Ġis Ġlittle Ġmore Ġpre scriptive Ġand Ġmeans Ġthat Ġthe Ġcode Ġis Ġless Ġambiguous Ġto Ġread Ġand Ġnot Ġas Ġeasy Ġfor Ġsimple Ġtypo Ġto Ġbecome Ġa Ġnon - ob vious Ġerror Ċ * ĠOperator ĠOver load Ġto Ġthe ĠMax ĠâĢĵ ĠKotlin Ġallows Ġbasic Ġoperator Ġover loads Ġfor Ġthe Ġbasic Ġoperators Ġ(+ , ĠâĢĵ Ġetc .) Ġbut ĠScala Ġallows Ġany Ġbunch Ġof Ġcharacters Ġto Ġbe Ġused Âł and Ġit Ġseems Ġto Ġhave Ġbeen Ġem br aced Ġby Ġlibrary Ġdevelopers . ĠAm ĠI Ġreally Ġmeant Ġto Ġremember Ġdifference Ġbetween Âł âĢľ ~ % #> âĢĿ Âł and ĠâĢľ ~ + #> âĢĿ ? Ċ * ĠS low Ġcompile Ġtimes Ċ Ċ """ Ċ Ċ Article ( ĊĠ Ġtitle Ġ= Ġ" Scala Ġvs ĠKotlin ", ĊĠ Ġurl Ġ= Ġ" https :// agile w om bat . com / 2 0 1 6 / 0 2 / 0 1 / scala - vs - kotlin /", ĊĠ Ġcategories Ġ= ĠlistOf ( ĊĠĠĠ Ġ" Kotlin ", ĊĠĠĠ Ġ" Scala " ĊĠ Ġ), ĊĠ Ġtype Ġ= Ġarticle , ĊĠ Ġlang Ġ= ĠEN , ĊĠ Ġauthor Ġ= Ġ" L ion el ", ĊĠ Ġdate Ġ= ĠLocalDate . of ( 2 0 1 6 , Ġ 2 , Ġ 1 ), ĊĠ Ġbody Ġ= Ġbody Ċ ) Ċ