Java හි this යතුරුපදය පාලනය කිරීම: පූර්ණ ආරම්භක-හිතකාමී මාර්ගෝපදේශය

目次

1. හැඳින්වීම

ඔබ ජාවා භාෂාවෙන් වැඩසටහන් ලිවීම ආරම්භ කරන විට, විවිධ යතුරුපද හමුවේ. ඒ අතර, “this” යතුර පන්තීන් සහ වස්තු-ඝටිත සංකල්පයන් අවබෝධ කර ගැනීමට ඉතා වැදගත් භූමිකාවක් ගනී. නමුත්, “this” යන වචනය ඉංග්‍රීසි භාෂාවේ “this/this one” යන අර්ථය පමණක් ඇති බැවින්, බොහෝ ආරම්භකයන්ට එය වැඩසටහන් ලිවීමේදී ඇයි භාවිතා කරනෙදැයි පළමුවෙන්ම පැහැදිලි නොවේ.

මෙම ලිපිය ජාවා භාෂාවේ “this” යතුරේ භූමිකාව සහ භාවිතය පැහැදිලි හා ආරම්භක-හිතකාමී ආකාරයෙන් විස්තර කරයි. ඔබ සාමාජික විචල්‍ය සහ ස්ථානීය විචල්‍ය අතර වෙනස්කම් හඳුනා ගැනීම සහ ආරම්භකයන් තුළ “this” භාවිතය වැනි මූලික කරුණු, ප්‍රායෝගික කේත උදාහරණ සමඟ ඉගෙන ගනී.

අපි සාමාන්‍ය ප්‍රශ්න, දෝෂ සහ වැදගත් සටහන්ද ආවරණය කරමු. මෙම මාර්ගෝපදේශයේ අවසානයේ, this යතුර කෙසේ ක්‍රියා කරයි සහ මූලික සිට උසස් අවස්ථා දක්වා විශ්වාසයෙන් භාවිතා කරන ආකාරය ඔබට අවබෝධ වනු ඇත.

2. “this” යතුර කුමක්ද?

ජාවා භාෂාවේ, “this” යනු වත්මන් වස්තුවම යන්නයි. පන්තියකින් නව උදාහරණයක් (වස්තුව) සෑදෙන විට, “this” යතුර එම විශේෂ වස්තුවට යොමු වීමට භාවිතා වේ.

එකම පන්තියෙන් බහු වස්තු සෑදුවත්, එක් එක් වස්තුවේ this වෙනත් උදාහරණයක් වෙත යොමු වේ. මෙය ඔබේ කේතය තුළ “දැනට කුමන වස්තුව ක්‍රියාත්මක වෙමින් පවතීද” යන්න පැහැදිලි කරයි.

this හි මූලික භූමිකා

  • උදාහරණ විචල්‍ය සහ ක්‍රම වෙත ප්‍රවේශය this.variableName හෝ this.methodName() භාවිතා කිරීමෙන් ඔබට විශේෂ වස්තුවේ විචල්‍ය සහ ක්‍රම වෙත ප්‍රවේශ විය හැක.
  • ස්ථානීය විචල්‍ය සහ උදාහරණ විචල්‍ය අතර වෙනස්කම් ආරම්භක පරාමිතීන් හෝ ක්‍රම පරාමිතීන් සාමාජික විචල්‍යයන් සමඟ එකම නාමය බෙදා ගත් විට, “this” භාවිතා කර ඒවා වෙනස් කරයි.

“this” අපට ඇයි අවශ්‍ය?

ජාවා භාෂාවේ, එක් පන්තියකින් බහු වස්තු සෑදිය හැකි අතර, ඒවාට ස්වතන්ත්‍ර තත්ත්ව සහ හැසිරීමක් ඇත. මෙම වස්තු තුළ, “මෙම වස්තුවම” යන්නට යොමු වීමට ක්‍රමයක් අවශ්‍ය වේ. එය “this” යතුර කරන්නේය.

උදාහරණයක් ලෙස, Person පන්තිය තුළ “this” භාවිතා කිරීමෙන් “මෙම විශේෂ Person වස්තුව” යන්න ප්‍රකාශ කළ හැක.

සාරාංශය

“this” වස්තු-ඝටිත වැඩසටහන්කරණයේ ඉතා වැදගත් සංකල්පයකි. එය වස්තුවට තම දත්ත සහ හැසිරීම වෙත ප්‍රවේශ වීමට පාලකයක් ලෙස කටයුතු කරයි.

3. this හි ප්‍රධාන භාවිතා

ජාවා භාෂාවේ “this” යතුර බොහෝ ස්ථානවල පෙනේ. පහත දැක්වෙන්නේ කේත උදාහරණ සමඟ නියෝජිත උදාහරණ කිහිපයක් වේ.

3.1 සාමාජික විචල්‍ය සහ ස්ථානීය විචල්‍ය අතර වෙනස්කම්

ජාවා භාෂාවේ, ආරම්භක පරාමිතීන් සහ සාමාජික විචල්‍යයන් සඳහා එකම නාමය භාවිතා කිරීම සාමාන්‍යයයි. එවැනි අවස්ථාවල “this” ඒවා වෙනස් කරයි.

උදාහරණය: සාමාජික විචල්‍ය සහ ස්ථානීය විචල්‍ය අතර වෙනස්කම්

public class Student {
    private String name;

    public Student(String name) {
        this.name = name; // Left: member variable, Right: constructor parameter
    }
}

this නොදැක්වූ විට, ස්ථානීය විචල්‍යයට ප්‍රමුඛත්වය ලැබේ, එවිට සාමාජික විචල්‍යය නිවැරදිව පවරා නොගනී.

3.2 ආරම්භකයන් තුළ this භාවිතය

ජාවා භාෂාවේ, ආරම්භක අතිරේක කිරීම (constructor overloading) මගින් බහු ආරම්භකයන් සලසා ඇත. this() භාවිතා කර වෙනත් ආරම්භකයක් කැඳවීමෙන් අනුපිළිවෙළ අඩු කළ හැක.

උදාහරණය: this() භාවිතා කර වෙනත් ආරම්භකයක් කැඳවීම

public class Book {
    private String title;
    private int price;

    public Book(String title) {
        this(title, 0); // calls another constructor
    }

    public Book(String title, int price) {
        this.title = title;
        this.price = price;
    }
}

මෙය ආරම්භක ලොජික් එකම ස්ථානයකට එකතු කර අනුපිළිවෙළ කේතය වැළැක්වීමට උපකාරී වේ.

3.3 ක්‍රම සම්බන්ධ කිරීම

this ආපසු ලබා දීමෙන් එකම උදාහරණය මත ක්‍රම අනුක්‍රමයෙන් කැඳවීමට හැකියාව ලැබේ.

උදාහරණය: ක්‍රම සම්බන්ධ කිරීම

public class Person {
    private String name;
    private int age;

    public Person setName(String name) {
        this.name = name;
        return this;
    }

    public Person setAge(int age) {
        this.age = age;
        return this;
    }
}

// Method chaining
Person p = new Person().setName("佐藤").setAge(25);

This is widely used in builder patterns and configuration classes.

3.4 වර්තමාන උදාහරණය පාරිභෝගික කිරීම

You can use “this” when you need to pass the current instance to another method or class.

උදාහරණය: වර්තමාන වස්තුව පාරිභෝගික කිරීම

public class Printer {
    public void print(Person person) {
        System.out.println(person);
    }
}

public class Person {
    public void show(Printer printer) {
        printer.print(this); // passes this instance
    }
}

4. “this” භාවිතා කිරීමේ වැදගත් සටහන්

Although very useful, “this” must be used carefully to avoid errors.

4.1 static පරිසරයන්හි this භාවිතා කළ නොහැක

A static method or variable belongs to the class itself—not to an instance—so “this” cannot be used.

වලංගු නොවන උදාහරණය

public class Example {
    private int value;

    public static void printValue() {
        // System.out.println(this.value); // Compile error
    }
}

4.2 this අධික ලෙස භාවිතා කිරීම කියවීමට අඩු කරයි

Using “this” unnecessarily may make the code harder to read. Use it only when needed.

අවශ්‍ය නොවන භාවිතයේ උදාහරණය

public class Test {
    private int x;

    public void setX(int x) {
        this.x = x; // needed
        // this.x = this.x + 1; // excessive use
    }
}

4.3 this සහ super අතර ගැලපීමෙන් වැළකී සිටින්න

  • this → වර්තමාන උදාහරණය
  • super → පියා (උප පන්තිය)

උදාහරණය: this සහ super භාවිතය

public class Parent {
    public void greet() {
        System.out.println("Parent method");
    }
}

public class Child extends Parent {
    public void greet() {
        System.out.println("Child method");
        super.greet();
    }
}

5. ප්‍රායෝගික කේත උදාහරණ

5.1 සාමාජික සහ ස්ථානීය විචල්‍ය වෙනස් කිරීම

public class Account {
    private String owner;

    public Account(String owner) {
        this.owner = owner;
    }

    public void printOwner() {
        System.out.println("Account Owner: " + this.owner);
    }
}

5.2 ආරම්භක චේන් කිරීම

public class Rectangle {
    private int width;
    private int height;

    public Rectangle(int width) {
        this(width, 1);
    }

    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }

    public void printSize() {
        System.out.println("Size: " + width + " x " + height);
    }
}

5.3 ක්‍රම චේන් කිරීම

public class BuilderExample {
    private String name;
    private int age;

    public BuilderExample setName(String name) {
        this.name = name;
        return this;
    }

    public BuilderExample setAge(int age) {
        this.age = age;
        return this;
    }

    public void printInfo() {
        System.out.println("Name: " + name + ", Age: " + age);
    }
}

BuilderExample person = new BuilderExample().setName("山田").setAge(30);
person.printInfo();

5.4 වර්තමාන උදාහරණය පාරිභෝගික කිරීම

public class Notifier {
    public void notifyUser(User user) {
        System.out.println(user.getName() + " has been notified.");
    }
}

public class User {
    private String name;
    public User(String name) { this.name = name; }
    public String getName() { return this.name; }

    public void sendNotification(Notifier notifier) {
        notifier.notifyUser(this);
    }
}

Notifier notifier = new Notifier();
User user = new User("佐藤");
user.sendNotification(notifier);

6. නිතර අසන ප්‍රශ්න (FAQ)

Q1. මට “this” සෑම විටම ලියවිය යුතුද?

A.
සෑම විටම නොවේ. ඔබට අවශ්‍ය වන විට භාවිතා කරන්න:

  • ස්ථානීය සහ සාමාජික විචල්‍ය නාමයන් එකිනෙකට අඩංගු වේ
  • ඔබට වර්තමාන උදාහරණය පැහැදිලිව සඳහන් කිරීමට අවශ්‍යයි

Q2. static ක්‍රමයක් තුළ this භාවිතා කළහොත් කුමක් වේද?

A.
ඔබට සංයුක්ත දෝෂයක් ලැබේ. static ක්‍රමයන් පන්තියට අයත් වන අතර, උදාහරණයක් නොවේ.

Q3. this සහ super අතර වෙනස කුමක්ද?

  • this : වර්තමාන උදාහරණය
  • super : පියා පන්තිය

Q4. මෙය method chaining හි ආපසු ලබා දීමේ ප්‍රයෝජනය කුමක්ද?

එය එකම අවස්ථාවේ (instance) අනුක්‍රමික ඇමතුම් කිරීමට ඉඩ සලසයි, කියවීමට පහසුකම වැඩි කරයි.

Q5. අවශ්‍ය විට “this” භාවිතය අමතක කළහොත් කුමක් සිදුවේ?

ස්ථානීය (local) විචල්‍යයන් සාමාජික (member) විචල්‍යයන් අතිරේක කරගත හැකි අතර, වැරදි පවරාම් සහ දෝෂ ඇති කරයි.

7. නිගමනය

මෙම ලිපිය Java “this” යතුර මූලික කරුණු සිට ප්‍රායෝගික භාවිතය දක්වා පැහැදිලි කරයි. ඔබ ඉගෙන ගත්තා:

  • සාමාජික විචල්‍යයන් සහ ස්ථානීය විචල්‍යයන් අතර වෙනස්කම් හඳුනා ගැනීම
  • ඉදිකරන (constructor) තර්කය මධ්‍යස්ථ කර ගැනීම
  • method chains නිර්මාණය කිරීම
  • වත්මන් අවස්ථාව (instance) වෙනත් ක්‍රමවලට ලබා දීම

අපි තවත් වැදගත් සටහන් කිහිපයක් ආවරණය කළෙමු, උදාහරණ ලෙස:

  • “this” ස්ථාවර (static) පරිසරයන්හි භාවිතා කළ නොහැක
  • “this” අධික ලෙස භාවිතා නොකරන්න
  • “super” සමඟ නිවැරදිව භාවිතා කරන්න

“this” කෙසේ ක්‍රියා කරන්නේදැයි අවබෝධ කර ගැනීම ඔබේ Java පන්තිය (class) නිර්මාණය පැහැදිලි කර දෝෂ අඩු කරයි. Java මූලික කරුණු අධ්‍යයනය කරගෙන, මෙම සංකල්පයන් වස්තුක කේත (real code) තුළ යොදා ගන්න.