public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
Дар ин ҷо ҳеҷ чизи мураккаб нест: усули Java, ки вазифаи он тавлид кардани сатри салом бо номе мебошад, ки мо ба он мегузарем. Мисли мисол - Hello world! My name is Bobby
Биёед сохтани усули дурустро тавассути дидани ҳар як калимаи калидӣ дар эъломияи усул (аз чап ба рост) фаҳмем. Калимаи аввалини мо ин аст public
ва он тағирдиҳандаи дастрасиро ифода мекунад:
Тағирдиҳандаҳои дастрасӣ
Онҳо доираи иҷозатдодашудаи намоёнро барои аъзоёни синф нишон медиҳанд, яъне маҳдудияти ҷойҳое, ки дар он тағирёбанда ё усул иҷозат дода мешавад. Дар Java тағирдиҳандаҳои дастрасии зерин истифода мешаванд:-
оммавӣ : ҷамъиятӣ. Усулҳо ё майдонҳо бо ин тағирдиҳанда оммавӣ мебошанд, ки ба синфҳои дигар (ё дурусттараш, усулҳо ва майдонҳои онҳо) аз бастаи ҷорӣ ва аз бастаҳои беруна намоёнанд. Ин сатҳи васеътарини дастрасии маълум аст;
-
муҳофизатшуда : усулҳо ё тағирёбандаҳо бо ин тағирдиҳанда метавонанд аз ҳама ҷо дар синф ё бастаи ҷорӣ ё дар синфҳое, ки онро мерос мегиранд, инчунин усулҳо ё майдонҳо, ҳатто агар онҳо дар бастаҳои дигар бошанд
protected String constructHelloSentence(String name) {...}
-
Тағирдиҳандаи пешфарз. Агар майдон ё усули синф тағирдиҳанда надошта бошад, тағирдиҳандаи пешфарз истифода мешавад. Дар ин ҳолат, майдонҳо ё усулҳо ба ҳама синфҳои бастаи ҷорӣ намоён мешаванд (ба монанди protected , аммо ҳангоми мерос мондан бе намоён).
String constructHelloSentence(String name) {...}
-
хусусӣ : муқобor тағирдиҳандаи ҷамъиятӣ . Усул ё тағирёбанда бо чунин тағирдиҳанда танҳо дар синфе, ки дар он эълон шудааст, дастрас аст.
private String constructHelloSentence(String name) {...}
String
дар имзои метод дорем (сатри якуми усул, ки хосиятҳои онро тавсиф мекунад).
Баргардонидани арзиши
Қимати бозгашт ин маълумот (баъзе натиҷаи иҷрои усул) мебошад, ки пас аз занг ба ҷои худ меояд. Ҳар як усул арзиши бозгашт дорад. Ё не?Усулҳои баргардонидани арзиши
Ин арзиш метавонад ҳама гуна маълумот бошад: тағирёбандаи навъи оддӣ ё навъи истинод. Дар ин мисол, мо нишон медиҳем, ки усул бояд an objectи навъи -ро баргардонадString
, ки он тавре ки мо дар ёд дорем, синфест, ки сатрро тавсиф мекунад. Нуктаи дуюм дар ин ҷо калима аст return
. Он ба арзиши бозгашт робитаи мустақим дорад: арзиши пас аз он ба ҷое, ки метод даъват шуда буд, баргардонида мешавад ва худи усул пас аз он return
пӯшида мешавад. Ин калима одатан дар сатри охирини усул пайдо мешавад (ба истиснои усулҳои дорои шохаҳои гуногун ба монанди if, else..
.). Агар шумо codeро дар сатри оянда пас аз: нависед return
:
private String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
return resultSentence;
System.out.println(resultSentence);
}
пас аз компилятор лаънатхо мегирем, ки ин чандон хуб нест (мураттиб сафсатахоро тавсия намедихад). Шумо инчунин бояд дар хотир дошта бошед, ки навъи маълумот пас аз он с
бояд ба намуди дар имзои метод эълоншуда мувофиқ бошад. Муфассалтар дар бораи ин ҷоreturn
бихонед .
бекор
Онvoid
дар Java барои чӣ истифода мешавад? На ҳама усулҳо арзиши бозгашт доранд. Баъзеҳо ё чизе надоранд ё ба баргардонидани чизе ниёз надоранд. Пас чӣ бояд кард? Сипас дар усули имзо мо менависем void
. Усули мо бе арзиши бозгашт чӣ гуна хоҳад буд?
protected void constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
}
Шумо эҳтимол пай бурдед, ки дар баробари арзиши бозгашт калимаи return
So it is нопадид шудааст, зеро усули мо набояд чизе баргардонад. Бо вуҷуди ин, онро метавон дар ин ҷо ҷойгир кард, аммо бе ягон маъно, танҳо return
; дар сатри охирин. Ин умуман бефоида аст, бинобар void
ин дар усулҳо бо ихтиёрӣ аст. Бо вуҷуди ин, он метавонад дар void
усулҳо, ба монанди шохаҳо ё ҳалқаҳо, ки шумо мехоҳед фавран аз усул хориҷ шавед, муфид истифода мешавад. Оянда дар эъломияи усул мо доштем constructHelloSentence
.
Номҳои усулҳо
constructHelloSentence
- номи усул, хусусияти фарќкунандае, ки тавассути он мо ин ё он усулро фарќ карда метавонем. Ва, мутаносибан, ин ё он усулро даъват кунед. Номҳои усулҳо бояд бо ҳарфи хурд оғоз шаванд, аммо инчунин қуттии шутурро истифода баранд (CamelCase, ҳолати шутур): яъне. Ҳар як калимаи навбатӣ дар ном бо калимаи қаблӣ ҳамсоя буда, бо ҳарфи калон навишта мешавад. Номҳои усул бояд усулро тавсиф кунанд (беҳтарин шарҳ ин номгузории дуруст аст). Барои ин аз феълҳо ё таркиби феълҳо истифода баред: getCat
, delete
, createCar
, ва ғайра. Дар як синф, номҳои усулҳо бояд беназир бошанд (ба ҳисоб гирифтани изофабории методҳо, ки мо дар бораи он каме баъдтар сӯҳбат хоҳем кард). Биёед минбаъд ба усуле, ки мо таҳлил карда истодаем, дида бароем ва бубинем ( String name
)
Параметрҳои усул
Методҳо метавонанд дорои маълумоти муайяне бошанд (ё набошанд), ки аз берун, аз он ҷое, ки метод даъват карда шудааст, меоянд. Дар ҳолати мо, мо мебинем, ки an objectи типӣString
бо ном меояд name
ва баъдтар мо ин тағирёбандаро дар усули худ истифода мебарем. Шумо метавонед шумораи номаҳдуди параметрҳоро дар як усул истифода баред, аммо зиёда аз 7 тавсия дода намешавад. Вақте ки мо шумораи дақиқи элементҳоро намедонем, аммо ҳамаи ин элементҳо барои як мақсад лозиманд ва як навъ хоҳанд буд (масалан, String
), эллипсис истифода мешавад:
public void constructHelloSentence(String...name) {
...
}
Муроҷиат ба ҳар як элемент чунин хоҳад буд: name[0]
Оё он ба шумо чизеро хотиррасон мекунад? Дуруст, массив! Агар мо нависем, ҳеҷ чиз тағир намеёбад:
protected void constructHelloSentence(String[] name) {
...
}
Дастрасӣ ба унсурҳо инчунин аз шакл хоҳад буд: name[1]
Ва як чизи дигар. Далелҳои усул метавонанд ниҳоӣ бошанд :
public String constructHelloSentence(final String name) {
...
}
Ин маънои онро дорад, ки истинод ба ном ба an objectи мушаххас вобаста аст String
ва онро бекор кардан мумкин нест. final
Шумо метавонед дар бораи кор бо тағирёбандаҳои истинод ва ҳамкории онҳо бо калимаҳои ҳифзшуда дар маводи " Намудҳои маълумотҳои истинод дар Java " хонед.
Усулҳои занг
Ҳамин тавр, мо эҷоди усулҳоро ҷудо кардем, ҳоло биёед дар бораи истифодаи онҳо сӯҳбат кунем. Чӣ тавр усулро дар Java даъват кардан мумкин аст? Ҳар як усул дар Java дар синф аст. Барои фаҳмидани он ки усулҳои занг дар Java чӣ гуна кор мекунанд, биёед як синфро гирем:public class StringConstructor {
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
}
Азбаски усули мо статикӣ нест (ин як мавзӯи алоҳида барои муҳокима аст, ки аз доираи мақолаи имрӯза берун аст), барои даъват кардани он шумо бояд аввал an object эҷод кунед ва сипас методро дар он даъват кунед:
class Application{
public static void main(String[] args) {
StringConstructor stringConstructor = new StringConstructor();
stringConstructor.constructHelloSentence("Den");
}
}
Дар аргументҳои усули мо, мо сатрро (ном) гузарондем, ки мо мехоҳем дар сатри натиҷавӣ дар экран нишон диҳем:
Hello world! My name is Den
Инчунин бояд дар хотир дошт, ки усулҳоро ҳар қадаре, ки ба мо лозим аст, дубора истифода бурдан мумкин аст - ҳеҷ гуна маҳдудият вуҷуд надорад.
ин
Шумо аксар вақт калимаи калидиро дар code мебинедthis
, ба монанди танзимкунанда:
public void setValue(Long value) {
this.value = value;
}
Ва ин чӣ маъно дорад? this
дар Java, ин истинод ба an objectи кунунии ин синф аст. Масалан, агар мо an object эҷод кунем:
StringConstructor stringConstructor = new StringConstructor();
он гоҳ this
дар дохor an object stringConstructor
пайванд ба ҳамон an object хоҳад буд. this
ҳам барои истинод ба тағирёбандаи an object (чун дар танзимгари дар боло) ва ҳам барои даъват кардани ягон усул истифода мешавад. Мо метавонем синфи худро каме аз нав нависем:
public class StringConstructor {
public String constructHelloSentence(String name) {
String resultSentence = this.getSentence() + name;
System.out.println(resultSentence);
return resultSentence;
}
private String getSentence() {
return "Hello world! My name is ";
}
}
Тавассути this
мо усули ин an objectро барои гирифтани сатри зарурӣ даъват мекунем. Аммо ба ҳар ҳол, чун қоида, ин барои усулҳо қариб истифода намешавад, зеро ҳатто бидуни он истинод ба усули an objectи додашуда мавҷуд аст; он асосан барои тағирёбандаи an object истифода мешавад.
Усули аз ҳад зиёд бор кардан
Фарз мекунем, ки ба мо усуле лозим буд, ки аслан як мантиқро иҷро кунад, аммо дарHello world
! ба ҷои ин world
мо мехоҳем калимаи худро (сатр) ворид кунем. Аммо мо аллакай як усул дорем constructHelloSentence
. Пас, оё мо бояд барои усуле, ки аслан як функсияро иҷро мекунад, номи нав пайдо кунем? Новобаста аз он ки чӣ гуна аст: дар айни замон усули изофабор ба кӯмаки мо меояд. Усули изофабори ин истифодаи як номи метод ҳангоми эълони он дар синф зиёда аз як маротиба мебошад. Аз нуқтаи назари синтаксиси забон, дар баъзе фазои маҳаллӣ ду номи якхела вуҷуд дошта наметавонад. Аммо инчунин имконпазир аст, ки усулҳоро бо як ном, вале далелҳои гуногун эълон кунед. Ба ибораи дигар, синф дорои изофабориҳо аст, вақте ки ду ё зиёда усулҳо бо номҳои якхела, вале маълумоти гуногуни воридотӣ мавҷуданд:
public class Constructor {
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
protected String constructHelloSentence(String firstName, String secondName) {
String resultSentence = "Hello " + firstName + "! My name is " + secondName;
System.out.println(resultSentence);
return resultSentence;
}
}
Дар ин ҷо мо мебинем, ки усулҳо набояд як тағирдиҳандаи дастрасӣ дошта бошанд (инчунин навъи бозгашт). Агар усули изофабор даъват карда шавад, пас компилятор аз якчанд усулҳои эълоншуда усули заруриро дар асоси параметрҳое, ки дар вақти занг муайян шудаанд, ба таври худкор муайян мекунад.
GO TO FULL VERSION