Thursday, July 21, 2016

(variables scope)වේරියබල් ස්කෝප් ගැන තොරතුරු.

16 වන පාඩම(variables scope)
 මේ losson එක ගොඩක් වැදගත්.
ජාවා වලදි එකපාරක් declare කරාම සමහර අවස්තාවල නැවත declare කරොත් compile error එනව. error වලක්වගෙන නැවත declare කරන්න පුලුවන් මේ lesson එකේ දැනුම තියනවනම්.
වගෙම සමහර variable declare කරල තිබුනත් error: cannot find symbol කියල error එකක් එනව.

මේ error දෙකටම හේතු වන කරුනක් තමයි variables scope .
 අපි { open කරනවනෙ.ඊලගට අවසනෙදි  } මගින් වහනව.මේ braces අතරෙ යම් දෙයක් declare කරොත් use කරන්න පුලුවන් { සහ } අතරෙදි පමනයි කියනෙක තමයි සරලම අදහස.බලමු example එකක්.

public class sol
{
            public static void main(String args[])
            {
            for(int i=0;i<5;i++)      
            {
            System.out.println(i);  
            }

            System.out.println(i);
            }
}
ඔයාල මේ code එක compile  කරොත් error එකක් එයි මන් කලින් කියපු  .
පේනවද i declare කරල තියනව කියල.නමුත් i use කරන්න පුලුවන් for loop එකෙ { සහ } අතර විතරයි.
 Red වලින් highlight කරපු ටික අයින් කරල try කරන්න.එතකොට එරර් එක නැතිවෙනව පෙනෙයි.

ඔයාලට තේරෙනව ඇති i scope එක තියෙන්නෙ for loop එකෙ { සහ } අතර විතරයි කියල.දැන් ප්රශ්නෙ කොහොමද i වල අගය print කරන්නෙ loop එකෙන් පිටදි කියල.
කරන්න තියෙන්නෙ i for-loop  එකට කලින් declare කරනෙක.


public class sol
{
            public static void main(String args[])
            {
                        int i;
            for(i=0;i<5;i++)           
            {
            System.out.println(i);  
            }

            System.out.println(i);
            }
}
දැන් කිසිම එරර් එකක් එන්නෙ නෑ නේද?.ඔයාලට පේනව ඇති කලින් for loop එකෙ for(int i=0;i<5;i++)
කියල තමයි යෙදුවෙ .ඒත් දැන්    (i=0;i<5;i++)     කියල.හේතුව තමයි i වල අගය for-loop එකට කලින් declare කරපු එක.කලින් I වල  scope එක  for loop එකෙ { සහ } අතර විතරයි.

දැන් I වල  scope එක  main මෙතඩ්  එකෙ { සහ } අතර. නිසා main මෙතඩ්  එකෙ { සහ } ඕනම තැනකදි I use කරන්න පුලුවන්,මතක තියාගන්න declare කරපු තැන ඉදන් පහලට කියල.
0
1
2
3
4
5
කියල output එක එයි.
I=5 අවස්තාවෙදි loop එක ඇතුලට යන්නෙ නෑ.පිටින් තියන print එකෙන් තමයි 5 print වෙන්නෙ.

දැන් බලමු එකපාරක්  declare කරල තවපාරක් declare කරන්න පුලුවන් කොහොමද කියල.

public class sol
{
            public static void main(String args[])
            {
                       
            for(int i=0;i<5;i++)      
            {
            System.out.println(i);  
            }

            int i=8;
            System.out.println(i);
            }
}
මෙතනදි කිසිම වරදක් නැතුව compile වෙයි.මෙතනත් scope එකේ concept එක යොදාගෙන තියෙනව.
for(int i=0;i<5;i++) එකේ I වල scope එක ඒකෙ {} අතර නමුත් for-loop එක ඉවරවෙලා declare කරපු I වල scope එක එතන ඉදන් පහලට තියෙන්නෙ main method එක ඇතුලෙ. නිසා තමයි error එකක් නොවෙන්නෙ මෙතනදි.
Output එක
0
1
2
3
4
8
කියල එයි.දැන් තවත් තෙරුම්ගන්න පහල code එක බලන්න.
public class sol
{
            public static void main(String args[])
            {
            int i=8;
            for(int i=0;i<5;i++)      
            {
            System.out.println(i);  
            }

           
            System.out.println(i);
            }
}

දැන් error එකක් එයි.ඔයාලට තේරෙනව ඇති මුලින්ම declare කරල  initialize කරල තියන I වල scope එක main මෙතඩ් එකේ {} අතර තියනව declare කරපු තැන ඉදන්. scope එක ඇතුලෙ තමයි for-loop එක තියෙන්නෙත්. නිසා තමයි නැවත declare කරල තියනව කියල error එකක් එන්නෙ.
පහල code එකෙත් බලන්න වැරැද්ද..

public class sol
{
            public static void main(String args[])
            {
                        {
                                    int i=5;//scope of i start here
                                    System.out.println(i);
                                   
                        }//scope of i end here 
            System.out.println(i);//cannot use i here.
            }
}
පහල example එකත් බලන්න.ඒකෙදි නිවරදියි code එක.
public class sol
{
            public static void main(String args[])
            {
                        {
                                    int i=5;
                                   
                                    {
                                                System.out.println(i);
                                    }
                                    System.out.println(i);
                        }
           
            }
}
For-loop ඇතුලෙ තවත් For-loop use කරනකොට නිවැරදිව කරගන්න පුලුවන් වෙයි මේ lesson එකෙන් පසුව.
වගෙම do-while ,while වලටත්.

ඉදිරියෙදි object oriented concept කරනකොට මේ දැනුම වැදගත් වෙනව.







No comments:

Post a Comment