1. Синтаксистік қант
Бағдарламалаушылар күрделі код немесе логиканы екі-үш жолмен жазуға болатындығын жақсы көреді, және код ықшам әрі оқылатын. Ал тіл жасайтындар кейде оларға бұл жағынан көмектеседі.
Тілдің айлалы ерекшеліктері, олар арқылы қысқа жолды (аз код жазып) пайдалануға болады, синтаксистік қант деп аталады. Шынын айтқанда, Java тілінде ондай көп емес.
Java жасаушылар Java-дан мүмкін болатын артықшылықты жою үшін барлығын жасады. Егер C++ тілінде бір нәрсені он түрлі жолмен жасауға болатын болса, Java-да көбінесе тек бір жолмен жасауға болады.
Бірақ мұндай біркелкілік Java бағдарламалаушыларына да, Java жасаушыларына да ұнай қоймайды. Кейде олар біз сияқты қарапайым жігіттердің өмірін жеңілдетеді.
Айтпақшы, сіздер autoboxing пен unboxing сияқты синтаксистік қантқа жататын нәрсемен танысып үлгердіңіздер. Салыстырыңыз:
Ұзын код | Ықшам код |
---|---|
|
|
|
|
|
|
Сол жақтағыдай ұзын кодтың орнына оң жақтағыдай ықшам код жаза аласыз. Ақылды Java-компилятор қысқаша кодтың негізінде оның толық нұсқасын өзі жасайды. Бұл дегеніміз синтаксистік қант.
2. Айнымалының типін шығару – var
Java 11-де компилятор одан да ақылды болды, енді айнымалының типін оның мәнінің типі бойынша анықтай алады. Ол кодта осыған ұқсайды:
var аты = мәні;
Мұндағы аты
— жаңа айнымалының атауы, мәні — оның бастапқы мәні, ал var
— айнымалыны жариялау үшін қолданылатын кілт сөзі. аты айнымалысының типі оған берілген мәннің типімен бірдей болады.
Мысалдар:
Бұл кодты біз қалай көреміз | Компилятор не көреді |
---|---|
|
|
|
|
|
|
|
|
|
|
Компилятор айнымалының типін өзі анықтайды немесе мәнге негізделе отырып айнымалының типін шығарады.
Бағдарламалаушылар арасында бұл мүмкіндікті тілге қосу жөнінде қызу пікірталастар болды. Көпшілігі var
-ды пайдалану оқылуды нашарлатады деп алаңдады.
Бұл жерде шындықтың үлесі бар, сондықтан var
-ды кодтың оқылымдылығын арттыратындай жерлерде қолданған дұрыс. Мысалы, осы екі жағдайда:
Жағдай 1: айнымалының мәніне қарап, оның типі бірден анықталады
Код | Түсініктеме |
---|---|
|
Айнымалының типі InputStream |
|
Айнымалының типі String |
Ал бұл жағдайларында var
қолдануға болмайды. Әйтеуір, айнымалының типі қандай?
Код | Түсініктеме |
---|---|
|
Айнымалының типін анықтау қиын |
|
Айнымалының типін анықтау қиын |
Жағдай 2: айнымалының типі кодты түсіну үшін маңызды емес
Кодта айнымалының ешқандай әдісі шақырылмайтын жағдайлар жиі кездеседі – айнымалы тек бірдеңені уақытша сақтау үшін ғана қолданылады. Мұнда var
-ды қолдану кодтың түсініктемесін еш қысқартпайды:
Ұзын код | Қысқа код |
---|---|
|
Біз деректер ағынынан stream метадеректерін алып, оларды storage сақтау қоймасына сақтадық. data айнымалысының типі қандай екені маңызды емес. |
Алтын орта
Енді бір кодты жазудың үш әдісін келтірейін. var
-ды пайдалану ең жақсы нұсқа болады.
Код | Ескерту |
---|---|
|
Тым ықшам |
|
Керемет |
|
Тым егжей-тегжейлі |
1 жолдан 2 жолға өткен кезде айнымалы атының (headerInfo
) есебінен кодқа аздап түсініктілік қостық. Енді әдіс тек мета деректерді қайтармағаны, бірақ тақырып ақпаратын қайтарғаны айқын болды.
Үшінші нұсқа артық болар еді. headerInfo
типінің FileMetaInfo
екенін бәрібір getFileMetaInfo()
әдісі арқылы түсінікті болды. Мета деректердің тағайындалуы әлдеқайда қызықтырақ.
3. Типті түсіру — diamond операторы: <>
var
операторынан бұрын коллекциялардың типтерін шығарып алуға әрекет жасалды. Мына жазба сәл артық көрінеді дейсіз бе:
ArrayList<String> list = new ArrayList<String>();
Java-ның жетінші нұсқасынан бастап, айнымалы жарияланған кезде коллекция элементтерінің типін жазуды өткізіп жіберуге болатын еді. Яғни, жоғарыдағы код аздап қысқартылған түрде жазылуы мүмкін:
ArrayList<String> list = new ArrayList<>();
Көріп тұрғаныңыздай, String типін екінші рет жазудың қажеті жоқ. Бұл var
операторымен салыстырғанда онша әсерлі көрінбесе де, сол кездегі үлкен жетістік болған.
Коллекция типіндегі бос үшбұрышты жақшаларды оператор diamond деп атаған: екі жақша алыстан бриллианттың силуэтін еске түсіретін.
var
және оператор diamond екеуін бір уақытта пайдалану ұсынылмайды:
var list = new ArrayList<>();
Коллекция сақтайтын тип туралы ақпарат мүлдем жоқ, ол ArrayList<Object> типіне анықталады.
4. Қос бұрышты жақшалар
Массивті тез инициализациялауды есіңізде сақтаңыз ба?
Ол жерде біз жай ғана мәндерді бұрышты жақшаларда тізе беретінбіз:
Мысалдар |
---|
|
|
Java жасаушылары деректерді массивке ықшам түрде жазу үшін жақшаларды қолдану идеясын ұнатты. Бірақ коллекциялар ше?
Коллекциялар үшін де қиял жеткілікті болды: қос бұрышты жақшалармен трюк жасауға рұқсат етілді.
Қантпен | Қантсыз |
---|---|
|
|
Егер компилятор сол жақтағы мысалдағы сияқты кодты кездестірсе, оны оң жақтағы кодқа түрлендіреді.
Код қажетті ықшамдыққа жете қоймайды. Мұнда ұсақ-түйектен үнем: әр жолы list
-ті жазудың қажеті жоқ. Айнымалы аты өте ұзын болған жағдайда бұл пайдалы болуы мүмкін.
Біреудің жобасында осындай кодты кездестірсеңіз, таң қалмаңыз 🙂
GO TO FULL VERSION