package Ġd _ functional Ċ Ċ // ĠYou Ġcan Ġadd Ġnew Ġmembers Ġto Ġany Ġclass Ġwith Ġextensions Ċ // ĠBoth Ġnew Ġfunctions Ġand Ġproperties Ċ Ċ // ĠSetting Ġup Ġtwo Ġbasic Ġdata Ġtypes Ċ data Ġclass ĠItem ( val Ġname : ĠString , Ġval Ġprice : ĠFloat ) Ċ data Ġclass ĠOrder ( val Ġitems : ĠCollection < Item >) Ċ Ċ // ĠAdd Ġan Ġextension Ġmethod Ġto ĠOrder Ċ fun ĠOrder . max Pr iced Item Value (): ĠFloat Ġ{ ĊĠĠĠ Ġ// ĠNote Ġthe Ġnull Ġconditional Ġoperator Ġthat Ġgu ards Ġaccessing Ġprice Ġif Ġthe Ġreturned Ġobject Ġis Ġnull ĊĠĠĠ Ġ// ĠNote Ġthe Ġnull Ġco ale sc ing Ġoperator Ġto Ġreturn Ġ 0 F Ġif Ġthe Ġleft Ġside Ġobject Ġis Ġnull ĊĠĠĠ Ġreturn Ġthis . items . max By OrNull Ġ{ Ġit . price Ġ} ?. price Ġ?: Ġ 0 F Ċ } Ċ Ċ // ĠAdd Ġanother Ġextension Ġmethod Ċ fun ĠOrder . max Pr iced ItemName (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġthis . items . max By OrNull Ġ{ Ġit . price Ġ} ?. name Ġ?: Ġ" NO _ PRODUCT S " Ċ } Ċ Ċ // ĠExtend ĠOrder Ġby Ġadding Ġa Ġnew Ġproperty Ġas Ġa Ġmember Ċ val ĠOrder . comma Delimited Item Names : ĠString ĊĠĠĠ Ġget () Ġ= Ġitems . join ToString Ġ{ Ġit . name Ġ} Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġitems Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠItem (" B read ", Ġ 2 5 . 0 F ), ĊĠĠĠĠĠĠĠ ĠItem (" W ine ", Ġ 2 9 . 0 F ), ĊĠĠĠĠĠĠĠ ĠItem (" Water ", Ġ 1 2 . 0 F ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġorder Ġ= ĠOrder ( items ) ĊĊĠĠĠ Ġprintln (" Max Ġpr iced Ġitem Ġname : Ġ${ order . max Pr iced ItemName () }") ĊĠĠĠ Ġprintln (" Max Ġpr iced Ġitem Ġvalue : Ġ${ order . max Pr iced Item Value () }") ĊĠĠĠ Ġprintln (" Items : Ġ${ order . comma Delimited Item Names }") Ċ }