JavaRush /Блоги Java /Random-TG /Усулҳо дар Java
articles
Сатҳи

Усулҳо дар Java

Дар гурӯҳ нашр шудааст
Усулҳо дар Java - 1Дар Java, барнома аз синфҳо иборат аст. Синфҳо, дар навбати худ, аз тағирёбандаҳо иборатанд. Онҳо барои нигоҳ доштани маълумот ва усулҳое масъуланд, ки барои рафтори синф масъуланд: ба ибораи дигар, мантиқе, ки он метавонад таъмин кунад (масалан, коркарди баъзе маълумот, даъват кардани усулҳои дигар ва ғайра). Мо метавонем дар бораи чунин ҷузъҳо ҳамчун тағирёбандаҳо муддати тӯлонӣ сӯҳбат кунем, аммо барои ҳамин мо имрӯз ҷамъ омадаем. Биёед дар бораи чунин як ҷузъи синф ҳамчун метод сӯҳбат кунем. Усулҳо дар Java - 2Метод блоки номшудаи codeест, ки дар дохor синф эълон шудааст. Он дорои пайдарпайии муайяни мукаммали амалҳо (дастурҳо) мебошад, ки ба ҳалли масъалаи алоҳида нигаронида шудаанд, ки метавонанд дубора истифода шаванд. Ба ибораи дигар, усул функсия аст: чизе, ки синфи шумо метавонад иҷро кунад. Дигар забонҳо низ вазифаҳо доранд. Танҳо дар Java онҳо аъзои синфҳо мебошанд ва мувофиқи истилоҳоти OOP методҳо номида мешаванд. Аммо пеш аз он ки идома диҳем, биёед як мисоли хурдеро бубинем:
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 - 3Дар 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);
}
Шумо эҳтимол пай бурдед, ки дар баробари арзиши бозгашт калимаи returnSo it is нопадид шудааст, зеро усули мо набояд чизе баргардонад. Бо вуҷуди ин, онро метавон дар ин ҷо ҷойгир кард, аммо бе ягон маъно, танҳо return; дар сатри охирин. Ин умуман бефоида аст, бинобар voidин дар усулҳо бо ихтиёрӣ аст. Бо вуҷуди ин, он метавонад дар voidусулҳо, ба монанди шохаҳо ё ҳалқаҳо, ки шумо мехоҳед фавран аз усул хориҷ шавед, муфид истифода мешавад. Оянда дар эъломияи усул мо доштем constructHelloSentence.

Номҳои усулҳо

constructHelloSentence - номи усул, хусусияти фарќкунандае, ки тавассути он мо ин ё он усулро фарќ карда метавонем. Ва, мутаносибан, ин ё он усулро даъват кунед. Усулҳо дар Java - 4Номҳои усулҳо бояд бо ҳарфи хурд оғоз шаванд, аммо инчунин қуттии шутурро истифода баранд (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 - 5Ҳар як усул дар 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. Пас, оё мо бояд барои усуле, ки аслан як функсияро иҷро мекунад, номи нав пайдо кунем? Новобаста аз он ки чӣ гуна аст: дар айни замон усули изофабор ба кӯмаки мо меояд. Усулҳо дар Java - 7Усули изофабори ин истифодаи як номи метод ҳангоми эълони он дар синф зиёда аз як маротиба мебошад. Аз нуқтаи назари синтаксиси забон, дар баъзе фазои маҳаллӣ ду номи якхела вуҷуд дошта наметавонад. Аммо инчунин имконпазир аст, ки усулҳоро бо як ном, вале далелҳои гуногун эълон кунед. Ба ибораи дигар, синф дорои изофабориҳо аст, вақте ки ду ё зиёда усулҳо бо номҳои якхела, вале маълумоти гуногуни воридотӣ мавҷуданд:
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;
  }
}
Дар ин ҷо мо мебинем, ки усулҳо набояд як тағирдиҳандаи дастрасӣ дошта бошанд (инчунин навъи бозгашт). Агар усули изофабор даъват карда шавад, пас компилятор аз якчанд усулҳои эълоншуда усули заруриро дар асоси параметрҳое, ки дар вақти занг муайян шудаанд, ба таври худкор муайян мекунад.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION