Wednesday, August 7, 2013

Named and Optional Arguments என்றால் என்ன?


முந்தைய பாகத்தில் ஒரு procedure ரை call செய்யும் போது அதில் இருக்கும் அத்தனை parameter ருக்குமான input களையும் அதே வரிசைப்படி கொடுக்கவேண்டும். இல்லையானால் error message வரும் என்பதை பார்த்தோம்.

Function / procedure calling அடிப்படை - 

1) declaration னில் உள்ள parameter வரிசைப்படி value க்களை அனுப்ப வேண்டும்.
2) அனைத்து parameter ருக்குமான value க்களையும் கட்டாயம் அனுப்பவேண்டும். 

இதில் உள்ள பிரச்சினைகள் -

1) வரிசைப்படித்தான் அனுப்ப வேண்டுமா? மாற்றி அனுப்பமுடியாதா?
2) கட்டாயம் அனுப்பித்தான் ஆகவேண்டுமா? விதிவிலக்கு இல்லையா?

சில programming language ல் இந்த 2 பிரச்சினைகளுக்கும் தீர்வு இருக்கிறது. அவை என்னவென்று இந்த பாடத்தில் பார்ப்போம்.

function ArithmeticFunction (Number1 : Float; Operator : Integer; Number2 : Float) : Float;
begin
  If Operator = 1
  then Result := Number1 + Number2
  else If Operator = 2
  then Result := Number1 - Number2
  else If Operator = 3
  then Result := Number1 * Number2
  else Result := Number1 / Number2;
end;

மேலே ArithmeticFunction என்ற function declare செய்யப்பட்டுள்ளது. இதில் 2 float type, 1 integer type parameter கள் உள்ளன. இது function ஆக இருக்கின்றதால் ஒரு value வை return செய்கிறது. Return ஆகக்கூடிய value float data type ஆக இருக்கிறது.

இந்த function னை பார்த்த உடன் அது என்ன செய்கிறதென்று உங்களுக்கு புரிந்தால் உங்களுக்கு புரோகிராமிங் புரிகிறது என்று அர்த்தம். புரோகிராம் இன்னும் சரளமாக எழுதத் தெரியாவிட்டாலும் குறைந்தபட்சம் என்ன எழுதப்பட்டுள்ளதென்பதாவது புரிகிறதே. புரோகிராமர் ஆவதற்கு இதுவே அடிப்படை. நமது புரோகிராமின் ஒவ்வொரு வரியும் என்ன செய்கிறதென்று நமக்கு புரியவேண்டும். ஒரு வரி புரியாவிட்டாலும் அந்த புரோகிராம் நமது கட்டுப்பாட்டில் இல்லை என்று அர்த்தம். மண்குதிரையை நம்பி ஆற்றில் இறங்கின கதைதான்.

ஒவ்வொரு வரியும் புரிந்துவிட்டால் மனப்பாடம் செய்யாமல் புரோகிராம் எழுத ஆரம்பித்துவிடலாம். ஒரு புரோகிராமில் எங்கு பிழையிருக்கிறது என்பதையும் கண்டுபிடித்துவிடலாம்.

-- புரியாதவர்களுக்காக மேற்கண்ட புரோகிராமுடைய pseudo-code இதோ:
 
function ArithmeticFunction (Number1 : Float; Operator : Integer; Number2 : Float) : Float;
begin
  If Operator = 1 என்றால் கூட்டச் சொல்கிறார்கள் என்று புரிந்துகொள்
  then Result := இரண்டு நம்பரையும் கூட்டவும்
  else If Operator = 2 என்றால் கழிக்கச் சொல்கிறார்கள் என்று புரிந்துகொள்
  then Result := முதல் நம்பரிலிருந்து இரண்டாவதை கழி
  else If Operator = 3 என்றால் பெருக்கச் சொல்கிறார்கள் என்று புரிந்துகொள்
  then Result := இரண்டு நம்பரையும் பெருக்கவும்
  else 1,2,3 தவிர வேறெதுவும் இருந்தால்
  Result := முதல் நம்பரை இரண்டாவதைக் கொண்டு வகுக்கவும்.
end;

மேற்கண்ட function னானது கொடுக்கப்பட்ட parameter ருக்கு தக்கவாறு 4 விதமான செயல்களை செய்து result ஐ திருப்பிதரும் வகையில் வடிவமைக்கப்பட்டுள்ளது.

இந்த function னை call செய்யவேண்டுமென்றால் 3 value க்களை கட்டாயம் நாம் அனுப்பவேண்டும். அதில் உள்ள வரிசைப்படி அனுப்ப வேண்டும். இதில் ஏதாவது ஒன்றை செய்யாவிட்டாலும் error என்று வரும்.

அடுத்து Main program மிலிருந்து நமது function னை call செய்து test செய்து பார்ப்போம்.

procedure Main;
Var
  FirstNumber, SecondNumber, Answer : Float;
begin
  FirstNumber := 10.10;
  SecondNumber := 20.20;

  Answer := ArithmeticFunction (FirstNumber, 1, SecondNumber) ; //addition operation. Answer is 30.3
  ShowMessage( Answer) ;

  Answer := ArithmeticFunction (10.10, 2, 5) ; //subtract operation. Answer is 5.1
  ShowMessage( Answer) ;

  Answer := ArithmeticFunction (FirstNumber, 3, 5.5) ; //multiplicative operation. Answer is 55.55
  ShowMessage( Answer) ;

  Answer := ArithmeticFunction (FirstNumber, 4, 5) ; //division operation. Answer is 2.02
  ShowMessage( Answer) ;

  //next line has data type mismatch problem. Incorrect order of values; 
  //second parameter is declared as integer; but float value is passed here;

  Answer := ArithmeticFunction (FirstNumber, SecondNumber, 1) ; 
  ShowMessage( Answer) ;
end;

இதில் உள்ள பிரச்சினை என்னவென்றால் formal parameter signature ரும் actual parameter signature ரும் வேறுவேறாக இருக்கின்றன. சரியான வரிசையில் value க்களை ஒழுங்கு படுத்தி திருத்தினால் புரோகிராம் வேலை செய்யும். அல்லது நாம் கொடுக்கும் value வை எந்த parameter ருக்குரியது என்று சொல்லவேண்டும். சொல்லிவிட்டால் புரோகிராம் அதை புரிந்து கொள்ளும். Error காட்டாது.

குறிப்பு : Parameter களுக்கான input value க்களை arguments என்றும் குறிப்பிடுவார்கள்.

Named Arguments என்றால் என்ன?

எந்த value எந்த parameter ருக்குரியது என்று குறிப்பிடுவதை Named Arguments என்பர்.

மேலே உள்ள Main Procedure ரில் சிவப்பு வண்ணத்தில் இருக்கும் வரியை இந்த வசதியை கொண்டு திருத்துவோம்.

பிழையான வரி
Answer := ArithmeticFunction (FirstNumber, SecondNumber, 1) ; 


சரியான வழி 1: சரியான வரிசையில் மாற்றி எழுதுவது 
Answer := ArithmeticFunction (FirstNumber, 1, SecondNumber,) ;  
//கூட்டவேண்டும் என மாறிவிட்டது

சரியான வழி 2: Named Arguments வசதியை பயன்படுத்துவது 
Answer := ArithmeticFunction (Number1 = FirstNumber, Number2 = SecondNumber, Operator = 1) ; 

அதாவது எந்த value எந்த parameter ருக்குரியது என்பதை சொல்லிவிட்டதால் parameter வரிசையை பற்றி கவலைப்படத் தேவையில்லை. கூட்டவேண்டும் என புரிந்துகொள்ளும்.
Optional Parameters என்றால் என்ன?

நமது function னில் உள்ள parameter களில் சிலவற்றிற்கு input அவசியமில்லை. வந்தால் நலம் வராவிட்டாலும் பரவாயில்லை என்ற நிலை ஏற்பட்டால் Optional Parameter என்கிற concept நமக்கு உதவியாக இருக்கிறது.

இந்த பாடத்தின் ஆரம்பத்தில் உள்ள function னை மாற்றம் செய்து பார்ப்போம்.

function ArithmeticFunction (Number1 : Float; Operator : Integer; Optional Number2 : Float = 1.0) : Float;
begin
  If Operator = 1
  then Result := Number1 + Number2
  else If Operator = 2
  then Result := Number1 - Number2
  else If Operator = 3
  then Result := Number1 * Number2
  else Result := Number1 / Number2;
end;

இந்த function னை call செய்யவேண்டுமென்றால் இரண்டு parameter ருக்கான value க்களை கட்டாயம் நாம் அனுப்பவேண்டும். ஒரு parameter ருக்கான value வை அனுப்பவேண்டிய கட்டாயமில்லை. அனுப்பினால் அது எடுத்துக்கொள்ளப்படும். அனுப்பாவிட்டால் அதில் உள்ள Default Value எடுத்துக்கொள்ளப்படும்.

Optional Number2 : Float = 1.0 என்பதன் அர்த்தம்...

Number2 என்பது Float data type வகையைச் சேர்ந்த ஒரு Optional Parameter ஆகும் இதன் default value 1.0 ஆகும்.

இங்கே கவனிக்கவேண்டிய விசயம்:

ஒரு function னில் உள்ள அனைத்து parameter களும்  Optional Parameter களாக இருந்தாலும் கூட பிரச்சினை எதுவும் கிடையாது.

நிபந்தனைகள்

Optional Parameter ருக்கு அடுத்து வலப்புறத்தில் எந்தவொரு கட்டாய parameter ரும் இருக்கக்கூடாது.

Optional Parameter கள் அனைத்தும் function னில் வலதுபுறத்தில்தான் declare செய்யப்படவேண்டும்.

Optional Parameter ருக்கு default value ஒன்று கண்டிப்பாக இருக்கவேண்டும்.

பிரச்சினைகளும் தீர்வுகளும் 

ஒரு procedure ரை call செய்யும் போது அதில் இருக்கும் அத்தனை parameter ருக்குமான input களையும் அதே வரிசைப்படி கொடுக்கவேண்டும் என்பதில் உள்ள பிரச்சினைகளும் அதற்கான தீர்வுகளும்.

1) வரிசைப்படிதான் அனுப்ப வேண்டுமா? மாற்றி அனுப்பமுடியாதா?
வரிசை மாற்றியும் அனுப்பலாம். இதற்கு Named Arguments தீர்வாக அமைந்ததை கண்டோம்.

2) கட்டாயம் அனுப்பித்தான் ஆகவேண்டுமா? விதிவிலக்கு இல்லையா?
Value வை அனுப்பாமலும் இருக்கலாம். இதற்கு Optional Parameters தீர்வாக அமைந்ததை கண்டோம்.

இறைவன் நாடினால் அடுத்த பாடத்தில் Pass by value, Pass by reference பற்றி பார்ப்போம்.

No comments:

Post a Comment