Variable scope என்றால் என்ன?:
Scope என்பது நிரலில் variable–களின் எல்லைகளை வரையறுக்கும். ரூபியில் variable scope நான்கு வகைப்படும், அவை local,global,instance மற்றும் class. கூடுதலாக ரூபியில் constant type-ம் உண்டு. ஒரு variable-ன் பெயரின்முன்வரும் சிறப்பு குறியீட்டைப்பொருத்து அதன் எல்லை அறியப்படுகிறது.
பெயரின் தொடக்கம் |
Variable Scope |
---|---|
|
A global variable |
|
An instance variable |
|
A local variable |
|
A constant |
|
A class variable |
கூடுதலாக ரூபியில் இரண்டு போலியான(pseudo) variables உண்டு. இதற்கு மதிப்பினைக்கொடுக்க இயலாது. ஒன்று nil, வெளிப்படையாக மதிப்பு அளிக்கபடாத variables-க்கு பொருத்தப்படும், மற்றொன்று self, தற்சமயம் பயன்பாட்டிலுள்ள object-டை குறிக்கும்.
ரூபி variable-லின் scope-யை கண்டறிதல்:
ஒரு variable-லின் பெயரை வைத்தே அதனின் scope-யை அறிந்து கொள்ளலாம். எனினும் நிரலில் scope-யை கண்டறிய defined? Method-டை பயன்படுத்தலாம். defined? Method கொடுக்கப்பட்ட variable-லின் scope-யை திருப்பியளிக்கும் அல்லது variable அறிவிக்கபடவில்லையெனில் ‘nil’-யை திருப்பியளிக்கும்.
[code lang=”ruby”]
x = 10
=> 10
defined? x
=> "local-variable"
$x = 10
=> 10
defined? $x
=> "global-variable"
[/code]
ரூபி local variable:
Local variable-ஆனது நிரலில் எந்த பகுதியில் அறிவிக்கப்படுள்ளதோ அந்த பகுதியில் மட்டுமே பயன்படுத்த முடியும். உதாரணத்துக்கு, ஒரு local variable ஆனது method அல்லது loop-ன் உள்ளே கொடுக்கப்பட்டிருந்தால் அதற்கு வெளியே அதை பயன்படுத்தமுடியாது. Local variable-லின் தொடக்கத்தில் underscore-ரோ அல்லது lower case letter-ரிலோ இருக்க வேண்டும் உதாரணத்துக்கு,
[code lang=”ruby”]
loopcounter = 10
_LoopCounter = 20
[/code]
ரூபி global variables:
ரூபியின் global variable-லை ரூபி நிரலில் எங்கிருந்து வேண்டுமானாலும், எங்கு கொடுத்திருந்தாலும் பயன்படுத்த முடியும். Global variable-லின் பெயரை dollar sign-னை முதன்மையாக கொடுக்க வேண்டும். உதாரணத்துக்கு,
[code lang=”ruby”]
$welcome = "Welcome to Ruby Essentials"
[/code]
Global variable பயன்படுத்துவதில் பிரச்சனை உள்ளது. நிரலில் எங்கிருந்து வேண்டுமானாலும் பயன்படுத்துவது மட்டுமில்லாது,அதை மாற்றவும் இயலும். இது பிழைகளை கண்டுப்பிடிப்பதை கடினமாக்கும்.
ரூபி இயக்க சூழல் (execution environment) பற்றிய விவரங்களைப்பெற சில முன் வரையறுக்கப்பட்ட (pre-defined) global variable-கள் உள்ளன. அதை பின்வரும் அட்டவணையில் காணலாம்.
Variable பெயர் |
Variable மதிப்பு |
---|---|
|
The location of latest error |
|
The string last read by |
|
The line number last read by interpreter |
|
The string last matched by regexp |
|
The last regexp match, as an array of subexpressions |
|
The nth subexpression in the last match (same as |
|
The case-insensitivity flag |
|
The input record separator |
|
The output record separator |
|
The name of the ruby script file currently executing |
|
The command line arguments used to invoke the script |
|
The Ruby interpreter’s process ID |
|
The exit status of last executed child process |
உதாரணத்துக்கு, gets method-டை கொண்டு, தட்டச்சு இயந்திரத்திலிருந்து உள்ளீட்டைப்பெற்று, $_ variable கொண்டு கொடுக்கப்பட்ட value-வை பெற முடியும்.
[code lang=”bash”]
irb(main):005:0> gets
hello
=> "hello\n"
irb(main):006:0> $_
=> "hello\n"
[/code]
இதே போல, ரூபி interpreter-ன் process ID-யை கண்டுப்பிடிக்க முடியும்.
[code lang=”bash”]
irb(main):007:0> $$
=> 17403
[/code]
ரூபி class variables:
Class variable ஒரு variable அது class-ன் எல்லா instances-களாலும் பகிர்ந்து கொள்ளப்படும். அப்படியென்றால் ஒரே ஒரு variable-லின் மதிப்பானது அந்த class-ன் எல்லா objects-களாலும் பயன்படுத்தப்படும். மேலும் ஒரு object instance variable-லின் மதிப்பு மாற்றம் செய்தால் அது அந்த class-லுள்ள எல்லா object instances-களிலும் மாறும். Java-வின் static variable-க்கு இணையானதாக இதைக்கருதலாம்.
Class variable-லை அறிவிக்க, variable பெயரில் இரண்டு @ குறியீடுகள் (@@) முன்னதாக கொடுக்க வேண்டும். Class variable அறிவிக்கப்படும்பொழுதே அதற்கான மதிப்பு அளிக்கப்படவேண்டும். உதாரணத்துக்கு,
[code lang=”ruby”]
@@total = 0
[/code]
ரூபி Instances variables:
Instance variables–ன் மதிப்பு ஒரு குறிப்பிட்ட object instance-க்கு மட்டும் சொந்தமானதாக இருக்கும். உதாரணத்திற்கு, ஒரு class-ல் @total என்கிற instance variable இருக்கிறதென வைத்துக் கொள்வோம். அந்த @total-லின் மதிப்பு ஒரு object instance மாற்றம் செய்தால் அந்த object-டின் @total மதிப்பை மட்டுமே மாற்றும். அதே class-யை சேர்ந்த மற்ற object–களிலுள்ள variable-லின் மதிப்பை மாற்றாது.
Instance variable-ஐ அறிவிக்கும்பொழுது, variable-லின் பெயரில் முன்னதாக @ குறியீட்டை சேர்க்க வேண்டும்.
[code lang=”ruby”]
@total = 10
[/code]
ரூபி Constant scope:
பொதுவாக constant –ற்கு கொடுத்த மதிப்பை மாற்ற கூடாது. ஆனால் ரூபியில் constant-ன் மதிப்பை மாற்ற இயலும். ரூபி interpreter ஒரு warning message-யை கொடுக்கும். இருப்பினும் constant-ன் மதிப்பை மாற்றிக் கொள்ளும்.
Class அல்லது module-லில் constants-யை கொடுத்தால், அது அந்த class அல்லது module-ன் முன்னொட்டுடன் (prefix) மட்டுமே பயன்படுத்தும்படியாக இருக்கும்.
[code lang=”ruby”]
module ConstantScope
CONST_EXAMPLE = “This is a constant”
end
ConstantScope::CONST_EXAMPLE => “This is a constant”
CONST_EXAMPLE=> uninitialized constant CONST_EXAMPLE
[/code]
Class அல்லது module வெளியில் கொடுத்தால் அது global scope ஆகும்.
— தொடரும்
பிரியா – priya.budsp@gmail.com – ஐக்கிய அரபு அமீரகம்