எளிய, இனிய கணிணி மொழி – ரூபி – 5 – ரூபி variable scope

Variable scope என்றால் என்ன?:

Scope என்பது நிரலில் variableகளின் எல்லைகளை வரையறுக்கும். ரூபியில் variable scope நான்கு வகைப்படும், அவை local,global,instance மற்றும் class. கூடுதலாக ரூபியில் constant type-ம் உண்டு. ஒரு variable-ன் பெயரின்முன்வரும் சிறப்பு குறியீட்டைப்பொருத்து அதன் எல்லை அறியப்படுகிறது.

பெயரின் தொடக்கம்

Variable Scope

$

A global variable

@

An instance variable

[a-z] or _

A local variable

[A-Z]

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]

variable_scope

ரூபி 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 gets

$.

The line number last read by interpreter

$&

The string last matched by regexp

$~

The last regexp match, as an array of subexpressions

$n

The nth subexpression in the last match (same as $~[n])

$=

The case-insensitivity flag

$/

The input record separator

$\

The output record separator

$0

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]

local_variable_scope

ரூபி 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 – ஐக்கிய அரபு அமீரகம்

%d bloggers like this: