Java әзірлеушілеріне арналған Scala нұсқаулығы: телефонды қойып қалмаңыз!

Новости мира

Осы серияда мен Scala-ның Java экожүйесімен тығыз қарым-қатынасына назар аудардым, бұл сізге Scala-ның Java нысанының көптеген мүмкіндіктерін қалай біріктіретінін көрсеттім. Дегенмен, егер Scala объектілерді жазудың басқа тәсілі болса, бұл шын мәнінде қызықты ештеңе болмас еді. Бағдарламалау процесінің тиімділігіне баса назар аударылған Scala-дағы функционалдық және объектілік түсініктердің үйлесімі тілді үйренуді айтарлықтай қиындатады және баяулатады, бұл Java/Scala жаңадан келген бағдарламашы үшін түсініксіз болуы мүмкін.
Осы серия туралы

Тед Неворд Scala бағдарламалау тіліне еніп, сізді өзімен бірге алып кетеді. DeveloperWorks ұсынған осы жаңа серияда сіз барлық әбігердің не екенін біліп, Scala-ның кейбір лингвистикалық мүмкіндіктерін көресіз. Егер салыстыру маңызды болса, Scala коды мен Java коды қатар көрсетіледі. Рас, сіз жақын арада білетіндей, Scala-дағы көптеген нәрселер Java бағдарламалауында сізге таныс ештеңемен тікелей байланысты болуы мүмкін емес — бірақ бұл Scala-ның сұлулығы! Ақыр соңында, Java-да бірдеңе жасауға болатын болса, Scala тілін үйренудің қажеті не?

Мысалы, if, while және for сияқты басқару құрылымдарын жүзеге асырудағы Scala тәсілін қарастырыңыз. Олар таныс Java конструкцияларына ұқсағанымен, Scala оларға кейбір ерекше сипаттамалар береді. Көптеген қателіктер жібергеннен кейін (және бұзылған кодты жазуды аяқтағаннан кейін) сізді осы айырмашылықтарды зерттеу қаупін тудырмау үшін осы айдың мақаласы Scala-да басқару құрылымдарын пайдалану кезінде не күтуге болатынын білуді ұсынады.

Person.scala дегенге қайта келу

Осы сериядағы соңғы мақалада сіз Scala бағдарламасының POJO-ға бағытталған орталар үшін қажет дәстүрлі «қабылдағыштар мен орнатушыларға» еліктейтін әдістерді анықтау арқылы POJO-ларды анықтауға қалай мүмкіндік беретінін көрдіңіз. Осы мақаланы жариялағаннан кейін мен Билл Веннерстен электрондық хат алдым, алдағы Scala канондық анықтамалығының авторы, Scala көмегімен бағдарламалау (Ресурстарды қараңыз). Билл бірдей әсерге жетудің оңай жолын көрсетті — scala.reflect.BeanProperty аннотациясын пайдаланып, былай делік:

Листинг 1. Түзетілген адам.scala
сынып тұлғасы(fn:String, ln:String, a:Int)
{
@scala.reflect.BeanProperty
var firstName = fn

@scala.reflect.BeanProperty
var фамилиясы = ln

@scala.reflect.BeanProperty
жас = a

def toString = қайта анықтау
«[Person firstName:» + firstName + » lastName:» + lastName +
» age:» + age + » ]»
}

1-тізімде көрсетілген тәсіл (алдыңғы мақаламнан қайта қаралған 13 тізбе) көрсетілген var бойынша алу/орнату жұбын жасайды. Жалғыз ескерту, мұндай әдістер Scala кодында жоқ, сондықтан кодтың басқа бөліктерімен шақырыла алмайды. Бұл әдетте үлкен мәселе емес, өйткені Scala өздігінен жасалған өрістердің орнына жасалған әдістерді пайдаланады; бірақ сіз бұл туралы алдын ала білмесеңіз, жағымсыз таң қалуыңыз мүмкін.

Бірақ 1-тізімді қарау кезінде мені ең қатты таң қалдырғаны, Scala тек функционалдық және объектілік концепцияларды біріктіру күшін көрсетпейді. Ол сондай-ақ Java бірінші шығарылымынан кейін он үш жыл өткен соң пайда болған объектілік тілдегі мазмұнды жұмыстың кейбір артықшылықтарын көрсетеді.