បទ​ពិសោធន៍ក្នុង Java ៖ ប្រយ័ត​ពេល​ប៉ាស្សេអញ្ញាត


*នៅក្នុង​កូដ​ខាង​ក្រោម Main class បាន​ហៅ​ NewClass1 មក។

*NewClass1 មាន​ data member ឈ្មោះ rect ។ rect មាន​ data type ជា MyRectangle ដែល​កំនត់​ដោយ MyRectangle class ។
ក្នុង constructor របស់ NewClass1, ខ្ញុំ​បង្កើត rect ឡើង, រួច​ហើយ​ហៅ class មួយ​ទៀតគឺ NewClass2។

*NewClass2 មាន​ data member ឈ្មោះ rect2 ដែល​មាន​ data type ជា MyRectangle ដែរ។
នៅ​ក្នុង constructor របស់ NewClass2, ខ្ញុំ initialise អថេរ rect2 អោយ​ស្មើ rect របស់ NewClass1 ។

* បញ្ហា​បាន​កើត​ឡើង៖ ពេល​ខ្ញុំ​កែ​តំលៃ​របស់ rect2 នោះ​តំលៃ​របស់ rect កែ​តាម​ rect2 ដែរ។ តើ​មក​ពី​អ្វី?!!!

public class Main {
    public static void main(String[] args) {
        NewClass1 myclass=new NewClass1(123);
    }
}
public class NewClass1 {
    MyRectangle rect;
    public NewClass1(int width){
        rect=new MyRectangle(width,100);
        System.out.println("value of width of class 1: "+rect.width);
        NewClass2 m2ndclass=new NewClass2(this);
    }
}
public class NewClass2 {
   MyRectangle rect2;
    public NewClass2(NewClass1 mclass){
        this.rect2=mclass.rect;
        rect2.width=3;
        System.out.println("Value of width of 2nd class: "+rect2.width);
        System.out.println("Value of width of 1st class: "+mclass.rect.width);
    }
}
public class MyRectangle {
    int width;
    int height;
    public MyRectangle(int width, int height){
        this.width=width;
        this.height=height;
    }
}

លទ្ធផល​ពេល Compile:
run:
value of width of class 1: 123
Value of width of 2nd class: 3
Value of width of 1st class: 3
BUILD SUCCESSFUL (total time: 0 seconds)

បញ្ហា​នៅ​ក្នុង​កូដ​នេះ គឺ​ខ្ញុំ​បាន​ដាក់​ថា

    this.rect2=mclass.rect;

ដូច្នេះ អថេរ rect2 ដែល​ជា member របស់ NewClass2 នឹង​ធ្វើ reference ទៅ​អថេរ rect ដែល​ជា member របស់ NewClass1 ។ ដូច្នេះ ពេល​ណា​យើង​កែ rect2 នោះ rect ក៏​កែ​តាម​ដែរ។

ដំនោះស្រាយ

* ដើម្បី​ដោះ​ស្រាយ​បញ្ហា​នេះ នៅ​ក្នុង NewClass2, យើង​ត្រូវ​ initialise អថេរ rect2 ដោយ​បង្កើត​ MyRectangle ថ្មី ៖

        MyRectangle rect2=new MyRectangle(0,0);

* បន្ទាប់​មក​ទៀត យើង​កូពី​ តំលៃ​របស់​member របស់ MyRectangle របស់ rect ចូល rect2

        rect2.width=mclass.rect.width;
        rect2.height=mclass.rect.height;

កូដ​របស់ NewClass2 ក្រោយ​ពេល​កែ​រួច

       public class NewClass2 {
       MyRectangle rect2=new MyRectangle(0,0);
       public NewClass2(NewClass1 mclass){
           rect2.width=mclass.rect.width;
           rect2.height=mclass.rect.height;
           rect2.width=3;
           System.out.println("Value of width of 2nd class: "+rect2.width);
           System.out.println("Value of width of 1st class: "+mclass.rect.width);
      }
      }

លទ្ធផលពេល compile :
run:
value of width of class 1: 123
Value of width of 2nd class: 3
Value of width of 1st class: 123
BUILD SUCCESSFUL (total time: 0 seconds)

About វិចិត្រ

ជា​ខ្មែរ​ម្នាក់ ជា​មនុស្ស​ម្នាក់ ធម្មតា​ដូច​មនុស្ស​ឯ​ទៀត​ដែរ
This entry was posted in ផ្សេង​ៗ and tagged . Bookmark the permalink.

11 Responses to បទ​ពិសោធន៍ក្នុង Java ៖ ប្រយ័ត​ពេល​ប៉ាស្សេអញ្ញាត

  1. សុភា និយាយថា៖

    លោកគ្រូហេតុអីមិនប្រើ បោះ ជំនួសពាក្យថា ប៉ាស្សេ?

    ឃើញលំហាត់ចឹង ធ្វើអោយខ្ញុំនឹកជើញកាលពីរៀននៅតិចណូណាស់😀 ។ តាមពិតទៅ ដើម្បីសរសេរកម្មវិធីអោយល្អ យើងត្រូវយល់អោយច្បាស់អំពី Pointor, Past by valus, Past by reference។

    • វិចិត្រ និយាយថា៖

      មក​ពី​ខ្ញុំ​ចូល​ចិត្ត​មើល​គេ​លេង​បាល់😀

    • កួរ​ស្រូវ និយាយថា៖

      សម្រាប់​ខ្ញុំវិញ ពាក្យ «passing argument» គួរ​តែ​ត្រូវ​បកប្រែ​ថា «ផ្តល់​ដំណឹង»​ ។ ហើយ pass by value គួរ​បកប្រែថា «ផ្តល់​ដំណឹងដោយ​​ចម្លង» និង pass by reference គួរ​បកប្រែ​ថា «ផ្តល់​ដំណឹង​ដើម» ។ ការយក​ដំណឹង​ដើម​មក​កែប្រែ វាអាច​ជា​ប្រការ​ធ្វើ​ប៉ះពាល់​ដល់​កន្លែង​ផ្សេង​ទៀត ដែល​យក​ដំណឹង​ដើម​នោះ​ទៅ​ប្រើ​ដែរ​។

      គឺ​ពិត​ជា​ដូច​ សុភា​ និយាយ​មែន បើយើង​មិន​ចង់​ឲ្យមាន​​ផល​​ប៉ះពាល់​ដល់​ «វត្ថុ​ដើម​ទេ» យើង​គួរ​តែ​ផ្តល់​ដំណឹង​តាមរបៀប​ចម្លង​យក​មក​ប្រើ (pass by value) ។

      • សុភា និយាយថា៖

        ចុះមេចមិនប្រើ បោះតំលៃ បោះអាស័យដ្ឋានតែម្តងទៅ?

      • កួរ​ស្រូវ និយាយថា៖

        ចុះ​ម៉េច​បាន​ជា​​បកប្រែ​ពាក្យ «pass» ថា​បោះ​ទៅវិញ​?
        ចុះ​ពាក្យ​ថា «throw» ដូច​ជាពាក្យ​ថា throw exception ត្រូវ​បកប្រែ​ថាយ៉ាង​ម៉េច​​ទៅ​វិញ?

        បើ​តាម​យោបល់​របស់​ខ្ញុំ យើង​គួរ​តែ​បកប្រែ​ពាក្យ​និមួយ​ៗ ដោយ​យោង​ទៅតាម​វប្បធម៌​ និង​ឬ ទម្លាប់​នៃ​ការប្រើពាក្យ​របស់​យើង​ផង​ដែរ​។ បើ​យើង​បកប្រែ​ថា «បោះ​អាស័យដ្ឋាន» អ្នក​ផង​ទាំងពួង​នឹងគិត​ទៅ​រឿង​ចែក​សំបុត្រ ជាជាង​ការទទួល​យក​​អាស័យដ្ឋាន​។ សម្រាប់​ខ្ញុំ យើង​គួរ​តែ​ប្រើ​ពាក្យ​សាមញ្ញ​ៗ ងាយ​យល់​ងាយ​ស្តាប់​ សម្រាប់​បកប្រែ​ពាក្យ​បរទេស​មក​ជា​ពាក្យ​ខ្មែរ​។

        ម៉្យាងទៀត តើ​ សុភា យល់​ស្រប​ដែរ​ឬទេ ចំពោះការបកប្រែ​ពាក្យ «pointer» មក​ជា​ពាក្យ​ខ្មែរ​ថា «ទំពក់» ?

    • កួរ​ស្រូវ និយាយថា៖

      នៅ​ក្នុង​ភាសា Java តើ​មាន​​ «ឈ្នាប់» (pointer) ដែរ​ឬទេ?

  2. អែម ចាន់​បុទុំ និយាយថា៖

    ចូលចិត្តមើលគេលេងប៉ាល់ តែចូលចិត្តលេងអត់ហ្នឹងលោកគ្រូ?

  3. វិចូច និយាយថា៖

    អត់​ចេះ Java ផង😀

  4. ក្មេងស្រែ និយាយថា៖

    ធ្លាប់​បាន​រៀន​ដែរ តែ​មិន​ជ្រៅទេ គឺ​គេ​បង្រៀន​សើរៗ​ប៉ុណ្ណោះ​ឯង! ដល់​មក​មើល​លំហាត់​១​នេះ ធ្លាក់ភ្នែក​តា​ម៉ង!

ឆ្លើយ​តប

Fill in your details below or click an icon to log in:

ឡូហ្កូ WordPress.com

អ្នក​កំពុង​បញ្ចេញ​មតិ​ដោយ​ប្រើ​គណនី WordPress.com របស់​អ្នក​។ Log Out / ផ្លាស់ប្តូរ )

រូប Twitter

អ្នក​កំពុង​បញ្ចេញ​មតិ​ដោយ​ប្រើ​គណនី Twitter របស់​អ្នក​។ Log Out / ផ្លាស់ប្តូរ )

រូបថត Facebook

អ្នក​កំពុង​បញ្ចេញ​មតិ​ដោយ​ប្រើ​គណនី Facebook របស់​អ្នក​។ Log Out / ផ្លាស់ប្តូរ )

Google+ photo

អ្នក​កំពុង​បញ្ចេញ​មតិ​ដោយ​ប្រើ​គណនី Google+ របស់​អ្នក​។ Log Out / ផ្លាស់ប្តូរ )

កំពុង​ភ្ជាប់​ទៅ​កាន់ %s