package Ġcom . ece . c se 4 9 9 A . sec 1 8 . group 0 1 . kotlin for java devs . kotlin Classes Ċ Ċ /** Ċ Ġ* ĠKotlin Ġconversion Ġof Ġjava Classes / Repository . java Ġclass Ċ Ġ* Ċ Ġ* ĠSingleton Ġobjects Ġare Ġspecified Ġwith Ġ' object ' Ġkeyword Ċ Ġ* Ċ Ġ* Ġstatic Ġmethods Ġand Ġvariables Ġare Ġkept Ġinside Ġ' comp anion Ġobject { ... }' Ġblock Ċ Ġ* Ċ Ġ* Ġdata Ġclasses Ġcan Ġbe Ġdestruct ed Ġand Ġloop ed Ġover Ġlike - Ġ' val / var Ġ( variable 1 , Ġvariable 2 ) Ġ= Ġobject ' Ċ Ġ* Ċ Ġ* Ġx Ġ= Ġy Ġ?: Ġ 0 , Ġsame Ġas Ċ Ġ* Ġ Ġif ( y != null ) Ġx Ġ= Ġy ; Ċ Ġ* Ġ Ġelse Ġx Ġ= Ġ 0 ; Ċ Ġ* Ċ Ġ* Ġ Ġuse Ġlist . map Ġ{ Ġlist Item Ġ-> Ġ... Ġ} Ġ Ġto Ġgenerate Ġanother Ġlist Ġby Ġiter ating Ġover Ġthe Ġoriginal Ġlist Ċ Ġ*/ Ċ object ĠRepository Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ users Ġ= Ġmutable ListOf < User >() ĊĊĠĠĠ Ġ// Ġproperly Ġexpose Ġthe Ġ_ users Ġlist Ġto Ġoutside ĊĠĠĠ Ġval Ġusers : ĠMutable List < User > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ users ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbad Ġidea Ġto Ġexpose Ġ_ users Ġlist Ġlike Ġthis , ĊĠĠĠĠ Ġ* Ġbecause Ġit Ġallows Ġthe Ġmain Ġlist Ġcan Ġbe Ġedited Ġfrom Ġoutside ĊĊĠĠĠ Ġfun Ġget Users (): ĠList < User > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ users ĊĠĠĠ Ġ} ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġval Ġformatted User Names : ĠList < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ_ users . map Ġ{ Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( user . lastName != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( user . firstName != null ) Ġ"${ user . firstName } Ġ${ user . lastName }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġuser . lastName Ġ?: Ġ" Unknown " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġuser . firstName Ġ?: Ġ" Unknown " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġgenerating Ġformatted Ġnames Ġusing Ġfor Ġloop ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Names Ġ= ĠArrayList < String >( users . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( firstName , ĠlastName ) Ġin Ġusers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname : ĠString Ġ= Ġif Ġ( lastName Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( firstName Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ firstName Ġ$ lastName " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlastName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ?: Ġ" Unknown " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Names . add ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuser Names ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġkeeping Ġthe Ġconstructor Ġprivate Ġto Ġenforce Ġthe Ġusage Ġof ĠgetInstance ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser 1 Ġ= ĠUser (" J ane ", Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġuser 2 Ġ= ĠUser (" John ", Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġuser 3 Ġ= ĠUser (" An ne ", Ġ" Do e ") ĊĊĠĠĠĠĠĠĠ Ġ_ users . add ( user 1 ) ĊĠĠĠĠĠĠĠ Ġ_ users . add ( user 2 ) ĊĠĠĠĠĠĠĠ Ġ_ users . add ( user 3 ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* Ġ( Kotlin Ġallows Ġto Ġ Ġadd Ġcodes Ġoutside Ġthe Ġclass Ġin Ġthe Ġsame Ġfile Ġas Ġa Ġclass ) Ċ Ġ* ĠExtension Ġfunctions / properties Ċ Ġ* Ġfunctions / properties Ġthat Ġare Ġadded Ġto Ġthe Ġclass Ġon Ġthe Ġgo Ċ Ġ*/ Ċ Ċ // Ġextension Ġfunction Ċ fun ĠUser . get Formatted Name (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( lastName Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( firstName Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ firstName Ġ$ lastName " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ?: Ġ" Unknown " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠfirstName Ġ?: Ġ" Unknown " ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġextension Ġproperty Ċ val ĠUser . user Formatted Name : ĠString ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( lastName Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( firstName Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ firstName Ġ$ lastName " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ?: Ġ" Unknown " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ?: Ġ" Unknown " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ fun Ġmain (){ ĊĠĠĠ Ġ// Ġusage : ĊĠĠĠ Ġval Ġuser Ġ= ĠUser ( firstName Ġ= Ġnull , ĠlastName Ġ= Ġ" Snow ") ĊĠĠĠ Ġval Ġname Ġ= Ġuser . get Formatted Name () ĊĠĠĠ Ġval Ġformatted Name Ġ= Ġuser . user Formatted Name ĊĊĠĠĠ Ġprintln ( name ) ĊĠĠĠ Ġprintln () ĊĠĠĠ Ġprintln ( formatted Name ) Ċ }