Probabil că ai auzit de „method signature” sau ai citit pe undeva… Dacă nu, atunci nu e nicio problemă, afli acum și ce este și ce reprezintă în Java.
„Method signature” (sau „semnătura metodei”, știu că traducerea sună aiurea, de aia las varianta în engleză cu ghilimele) reprezintă definirea unei metode. Cum definești o metodă? Scrii fain-frumos tipul metodei, numele și lista de parametri. Atât. Doar că lucrurile se pot complica…
La ce ne ajută „method signature”? Pe lângă faptul că ne ajută la definirea unei metode și ne putem opri doar la nivel teoretic (la conceptul „method signature”), mai poate avea un rol important atunci când folosim același nume de metodă. De exemplu, să zicem că avem 2 metode cu numele calcPerimetru(). Stai un pic, e posibil? Sigur că da… Trebuie doar să fim atenți la parametrii pe care îi introducem. Sunt 2 reguli de bază ce trebuie luate în considerare dacă vrem să avem mai multe metode cu același nume:
- Numărul parametrilor trebuie să fie diferit (nu ai voie să ai două metode cu același număr de parametri).
- Dacă totuși vrei să fii Batman și încalci regula numărul 1, atunci cel puțin un parametru trebuie să aibă un tip de dată diferit.
Merită să ne complicăm și să folosim același nume la mai multe metode? Da, e chiar indicat și profesionist din partea ta dacă faci asta. În Java, chestia asta se numește „method overloading” („metodă supraîncărcată”). Stai liniștit, poți identifica ușor ce metodă apelezi în funcție de argumentele introduse.
Exemplu de „method overloading”
1| public static int calcPerimetru(int a, int b) { 2| return a + b; 3| } 4| 5| public static int calcPerimetru(int a, int b, int c) { 6| return a + b + c; 7| } 8| 9| public static int calcPerimetru(int a, int b, int c, int d) { 10| return a + b + c + d; 11| }
Așadar, în exemplul anterior găsești 3 metode cu același nume, dar cu parametri diferiți. Ce se întâmplă dacă le apelezi în metoda main()?
1| public static void main(String[] args) { 2| System.out.println(calcPerimetru(1,2)); // 3 3| System.out.println(calcPerimetru(1,2,3)); // 6 4| System.out.println(calcPerimetru(1,2,3,4)); // 10 5| }
Practic am apelat aceeași metodă și deosebirea se face doar la numărul de argumente la funcția apelată.
Exemplu de „method overloading” cu tipuri de date diferite
1| class SameMethodsButDifferentDataTypes { 2| void suma(int a, int b) { 3| System.out.println(a + b); 4| } 5| 6| void suma(float a, float b) { 7| System.out.println(a + b); 8| } 9| 10| class Exemplu { 11| public static void main(String[] args) { 12| SameMethodsButDifferentDataTypes test = new SameMethodsButDifferentDataTypes(); 13| test.suma(1,2); // 3 14| test.suma(1.1f,2.2f); // 3.3000002 15| } 16| }
Ce zici de exemplul ăsta? Am forțat un pic numele clasei, dar sper că înțelegi ideea…
Ca și concluzie, ce reprezintă „method signature” în Java? Definiția unei metode (tip-nume-parametri), care poate avea un rol esențial în scrierea unui program mai eficient folosind „method overloading”.
Te „lovești” de chestii tot mai complicate pe măsură ce aprofundezi tehnicile de programare.
Învață să fii profesionist!