Tuesday, August 31, 2010

ஆக்சன்ஸ்கிரிப்ட் - 6

ஆக்சன்ஸ்கிரிப்ட் வேரியபிள்கள், C++ மற்றும் Java வேரியபிள்களை போல அல்ல. இவைகளில் block-level scope ஸ்கோப் இல்லை. ஒரு block of code என்பது ஒரு திறந்த அடைப்புக் குறி ( { ) மற்றும் மூடிய அடைப்புக் குறிகளுக்கு ( } ) இடையே உள்ள ஒரு ஸ்டேண்ட்மெண்ட்கள் குழு ஆகும். C++ மற்றும் Java  போன்ற சில புரோக்ராமிங் மொழிகளில், ஒரு block of codeக்கு உள்ளே டிக்ளேர் செய்யப்படும் வேரியபிள்கள் அந்த block of codeக்கு வெளியே கிடைக்காது. இந்த தடைக்கு பெயர்தான் block-level scope ஆகும். இது ஆக்சன்ஸ்கிரிப்டில் இல்லை. நீங்கள் ஒரு வேரியபிளை  ஒரு block of codeக்கு உள்ளே டிக்ளேர் செய்தால், அது block of codeக்கு உள்ளே மட்டுமல்லாமல் function-ன் மற்ற பாகங்களிலும் கிடைக்கும். எடுத்துக்காட்டாக கீழ்காணும் function-ல் பல்வேறு block scope-களில் வரையறுக்கப்பட்ட வேரியபிள்கள் உள்ளன. அனைத்து வேரியபிள்களும் function முழுவதும் கிடைக்கும்.

function blockTest (testArray:Array)
{
    var numElements:int = testArray.length;
    if (numElements > 0)
    {
        var elemStr:String = "Element #";
        for (var i:int = 0; i < numElements; i++)
        {
            var valueStr:String = i + ": " + testArray[i];
            trace(elemStr + valueStr);
        }
        trace(elemStr, valueStr, i); // all still defined
    }
    trace(elemStr, valueStr, i); // all defined if numElements > 0
}

blockTest(["Earth", "Moon", "Sun"]);

இந்த block-level scope இல்லாததால் ஏற்படும் நன்மை என்னவெனில், ஒரு வேரியபிளை நீங்கள் டிக்ளேர் செய்யும் முன்னரே அதை படிக்க அல்லது எழுத முடியும்.  இதை function-க்கு முன்னால் அது டிக்ளேர் செய்யப்படும் வரை செய்ய முடியும். இதற்கு காரணம் hoisting என அழைக்கப்படும் ஒரு தொழில்நுட்பம் ஆகும். இந்த தொழில்நுட்பத்தில் compiler அனைத்து டிக்ளேர் செய்ய்யப்பட்ட
வேரியபிள்களையும் function-க்கு முன்னால் நகர்த்துகிறது. எடுத்துக்காட்டாக, கீழ்காணும் ஸ்கிரிப்டில் num வேரியபிளுக்கான ஆரம்ப trace() function ஆனது num வேரியபிளுக்கு முன்னாலேயே டிக்ளேர் செய்யப்பட்டாலும், ஸ்கிரிப்ட் compile ஆகிறது.

trace(num); // NaN
var num:Number = 10;
trace(num); // 10

இருப்பினும், compiler  எந்த assignment statement-களையும் hoisting செய்யாது. இதனால்தான் num-ன் ஆரம்ப trace() என்பது NaN (not a number) என கமெண்ட் காட்டுகிறது. இது Number data type-க்கான default மதிப்பாகும். அதாவது நீங்கள் வேரியபிள்கள் டிக்ளேர் செய்வதற்கு முன்னாலேயே வேரியபிள்களுக்கு மதிப்பளிக்கலாம்.

num = 5;
trace(num); // 5
var num:Number = 10;
trace(num); // 10

Default values
ஒரு default value என்பது நீங்களாக ஒரு மதிப்பை அமைக்கும் முன் ஒரு வேரியபிள் கொண்டுள்ள மதிப்பாகும். நீங்கள் ஒரு வேரியபிளுக்கு முதன்முறையாக மதிப்பபை அமைத்தால் அது initialize செய்யப்படுகிறது. ஆனால் நீங்கள் ஒரு variable-ஐ டிக்ளேர் செய்து விட்டு மதிப்பளிக்கா விட்டால், அது initialize செய்யப்படவில்லை. ஒரு initialize செய்யப்படாத வேரியபிளின் மதிப்பு அதன் data type-ஐ சார்ந்துள்ளது. கீழே வேரியபிள்களின் default values கொடுக்கப்பட்டுள்ளன.

Data type Default value
Boolean false
int 0
Number NaN
Object null
String null
uint 0
Not declared (டிக்ளேர் செய்யப்படாவிட்டால் -கீழே காண்க) undefined
All other classes, including user-defined classes. null

Number வகை வேரியபிள்களுக்கு, default value, NaN (not a number) ஆகும். இது  IEEE-754 standardஆல் வரையறுக்கப்பட்ட ஒரு சிறப்பு மதிப்பாகும். இது ஒரு எண்ணை குறிக்காத ஒரு மதிப்பை குறிக்கிறது.

ஒரு வேரியபிளை டிக்ளேர் செய்து விட்டு, அதன் data type-ஐ டிக்ளேர் செய்யாவுட்டால், default data type எடுத்துக் கொள்ளப்படும். அதாவாது வேரியபிள் வகைப்படுத்தப்படவில்லை என பொருள். நீங்கள் ஒரு வகைப்படுத்தப்படாத வேரியபிளை initialize-ம் செய்யாவிட்டால், அதன் default value வரையறுக்கப்படாது.

Boolean, Number, int, மற்றும் uint தவிர மற்ற data typeகளுக்கு அது எந்த initialize செய்யப்படாத வேரியபிளானாலும் அதன் default value,  null ஆகும். இது ActionScript 3.0ஆல் வரையறுக்கப்படும் அனைத்து classகள் மற்றும் நீங்கள் உருவாக்கும் custom class-களுக்கும் பொருந்தும்.

null என்ற மதிப்பு Boolean, Number, int, or uint வகை வேரியபிள்களுக்கு ஒரு valid value அல்ல. அப்படிப்பட்ட ஒரு வேரியபிளுக்கு நீங்கள் null  மதிப்பை கொடுக்க முனைந்தால், அது அந்த டேடா வகைக்கான default valueவாக மாற்றப்படும். Object வகை வேரியபிள்களுக்கு நீங்கள் null மதிப்பை அளிக்கலாம். Object வகை வேரியபிள்களுக்கு நீங்கள் மதிப்பை வரையறுக்காவிட்டால், அந்த மதிப்பு  nullஆக மாற்றப்படும்.

Number வகை வேரியபிள்களுக்கு, NaN()  என்ற ஒரு சிறப்பு மேல்-நிலை function உள்ளது. இது வேரியபிள் எண்ணாக இல்லையென்றால் Boolean மதிப்பை true எனவும், இல்லையென்றால் false எனவும் கொண்டு வருகிறது.

3 comments:

  1. எஸ். கே. யாரு படிக்கிறாங்கன்னு கேட்டுட்டு கஷ்டப்படுங்க... இல்லைனா... வெறும் எண்ணிக்கை பதிவுதான் கிடைக்கும்... தண்ணீரை சிக்கனமா பயன்படுத்துங்க அப்பு :)

    ReplyDelete
  2. //Sugumarje said... //
    தங்கள் வருகைக்கும் கருத்துக்கும் மிக்க நன்றி! இந்த தளத்திற்கு வருகிறார்கள் படிக்கிறார் என அறிந்து கொள்கிறேன் (கூகிள் அனாலிடிக்ஸ்). மேலும் இதனால் ஒருவருக்கு ஒரே ஒருவருக்கு பயன்பட்டால் கூட போதும். அந்த ஒருவருக்காக நான் எனக்கு தெரிந்ததை எழுதுவேன். தெரிந்ததை மறைத்து வைத்து யாருக்கு என்ன லாபம் சார்? :-)

    ReplyDelete
  3. பதிவுக்கு நன்றி. அடுத்த பதிவு எப்பொழுது!

    இதை போல் பதிவு வேறு எந்த வலைபூவிலும் எளிய தமிழில் இல்லை.

    எனவே, தொடர்ந்து தாருங்கள். என்னை போல் பின் நாளில் பார்பவர்களுக்கும் பயன் படும்.

    நன்றி. அன்புடன் பல்லவன்.

    ReplyDelete