Wednesday, August 7, 2013

Expression , Operator precedence என்றால் என்ன?


புரோகிராமிங் என்றால் என்ன? தொடர் 10

நாம் எழுதுகின்ற program மில் expression என்பது இன்றியமையாதது ஆகும். எனவே அதைப்பற்றி இங்கே தெரிந்து கொள்வோம்.

Expression என்றால் என்ன? What is an expression in computer programming?

An expression is a combination of values, constants, variables, operators, and functions, which are constructed according to the syntax of the language, which are interpreted according to the particular rules of precedence, that evaluates to a single value.

அதாவது values, constants, variables, operators மற்றும் functions களைக் கொண்டு எழுதப்படுவதை Expression என்று சொல்லலாம்.

நாம் எந்த programming language ல் program எழுதுகிறோமோ அந்த language புரிந்து கொள்வது மாதிரி நமது expression அமையவேண்டும்.

உதாரணத்திற்கு

A := 1 + 2 + 3
A := A + A
B := "Learn Programming"
C := 10 > 5
A + 15

இவையெல்லாம் expression கள் ஆகும்.

நாம் எழுதிய expression ஆனது குறிப்பிட்ட programming language னுடைய rules of precedence படி evaluate செய்யப்பட்டு இறுதியில் ஒரு value வை தருகிறது.

அந்த value வானது integer, float, string, அல்லது boolean ஆக இருக்கும். அதாவது நமது expression னில் எந்தவகையான elements இருந்ததோ அந்த வகையான value கிடைக்கும்.

உதாரணத்திற்கு
A := 1 + 2 + 3

என்பது integer expression ஆகும். ஏனென்றால் இங்கே Operand கள் Integer type ஆக இருக்கின்றன, மேலும் arithmetic operator பயன்படுத்தப்பட்டுள்ளது. எனவே result டும் integer ஆக இருக்கும்.

இதனுடைய result 6 ஆகும். இது A என்ற variable லில் store செய்யப்படுகிறது.

அடுத்து
B := "Learn Programming"

என்பது string expression ஆகும். ஏனென்றால் இங்கே operand string type ஆக இருக்கிறது, எனவே result டும் string ஆக இருக்கும்.

இதனுடைய result "Learn Programming" ஆகும். இது B என்ற variable லில் store செய்யப்படுகிறது.

அடுத்து
C := 10 > 5

என்பது boolean expression ஆகும். ஏனென்றால் இங்கே relational operator பயன்படுத்தப் பட்டுள்ளது. இதனுடைய result boolean ஆக இருக்கும்.

இதனுடைய result TRUE ஆகும். இது C என்ற variable லில் store செய்யப்படுகிறது. Boolean expression ஆனது comparison expression, conditional expression, அல்லது relational expression என்றும் குறிப்பிடப்படுகிறது.

Rules of precedence / Operator precedence என்றால் என்ன?

Expression என்பது simple ஆகவோ அல்லது complex ஆகவோ இருக்க வாய்ப்புண்டு.
அவ்வாறு complex ஆக இருக்கும் expression களில் இடம்பெற்றுள்ள element களை எந்த வரிசைப்படி evaluate or operate செய்து விடை காணவேண்டும் என்பதைக் கூறும் விதிகளைத்தான் rules of precedence அல்லது operator precedence என்று கூறுகிறோம்.

அதாவது எதை முதலில் evaluate செய்யவேண்டும் எதை அடுத்து evaluate செய்யவேண்டும் என்பதை தெளிவாக தீர்மானிக்க இவை உதவுகின்றன. இந்த விதிகள் இல்லாமல் போனால் நமது expression னுக்கான விடையை தெளிவாக நம்மால் கணிக்க இயலாது என்பதை நினைவில் கொள்ளவேண்டும்.

In complex expressions, rules of precedence (sometimes called operator precedence) determine the order in which operations are performed.  This rule is used to clarify unambiguously which procedures should be performed first in a given expression.

நமது expression னில் பல்வேறு operator கள் இருக்கும் பட்சத்தில் முன்னுரிமை எவ்வாறு வழங்கப்படுகிறது என்பதை விளக்கும் பட்டியல்.

operator precedence, rules of precedence, expression evaluation, learn programming, what is programming

ஒரு expression னில் ஒன்றுக்கு மேற்பட்ட operator இருந்தால் மேற்கண்ட பட்டியல் படி முன்னுரிமை வழங்கப்பட்டு, அதன் பிரகாரம் expression evaluate செய்யப்படுகிறது. அப்படியில்லாமல் சம உரிமைபெற்ற இரண்டு operator கள் பயன்படுத்தப்பட்டிருந்தால் இடமிருந்து வலமாக அவை evaluate செய்யப்பட்டு விடை தரப்படும்.

A + B + C

இதில் இரண்டு சம உரிமைபெற்ற operator பயன்படுத்தப்பட்டிருப்பதால் இடமிருந்து வலமாக evaluate செய்யப்பட்டு விடை தரப்படும்.

சம உரிமை என்பதன் பொருள் நீங்கள் A யுடன் B ஐ கூட்டி வரும் விடையோடு C ஐ கூட்டினாலோ

அல்லது B யுடன் C ஐ கூட்டி வரும் விடையோடு A ஐ கூட்டினாலோ விடையில் எந்த மாறுதலும் வராது.

அடுத்து

X + Y * Z

இதில் முதலில் Y யும் Z டும் multiply செய்யப்பட்டு வரும் விடையோடு X ஐ கூட்டி விடை தரப்படும். இங்கு * முதலில் operate செய்யப்படுகிறது, ஏனென்றால் + ஐ விட * குத்தான் முன்னுரிமை நமது பட்டியலில் தரப்பட்டுள்ளது.

நீங்கள் கணக்கு போடும் போது மாற்றி evaluate செய்துவிட்டால் விடை தவறாக வரும்.

உதாரணத்திற்கு

X := 8
Y := 5
Z := 2
என்று வைத்துக்கொண்டால்
X + Y * Z என்பது 8 + 5 * 2 என்று ஆகும்.

Operator precedence rule பிரகாரம் முதலில்
5 * 2 evaluate செய்யப்படுகிறது. விடை 10.

அடுத்து
8 + கிடைத்த விடை.
அதாவது 8 + 10
இறுதியில் 18 கிடைக்கும்.

Operator precedence rule ஐ நீங்கள் follow செய்யாவிட்டால் என்னவாகும்?
8 + 5 * 2

இடமிருந்து வலமாக evaluate செய்ய ஆரம்பிப்பீர்கள்
8 + 5 விடை 13

அடுத்து
கிடைத்த விடை * 2
அதாவது 26

எவ்வளவு வித்தியாசம் பார்த்தீர்களா? கணக்கும் தப்பாகிவிட்டது. Program மும் தப்பாகிவிட்டது. என்னப்பா ஒரு சின்ன விசயத்தை கூட உன்னால் செய்ய முடியவில்லையே என்று பேச்சு கிடைக்கும்.

இல்லை இல்லை 26 தான் சரி. இப்படித்தான் என் கணக்கு வேலை செய்யணும். அய்யய்ய... computer தவறாக சொல்கிறதே என்று நீங்கள் கூறுவீர்களானால் parentheses என்னும் அடைப்புக் குறிகளை expression னில் பயன்படுத்தி முன்னுரிமைகளை நீங்களே தீர்மானிக்கலாம். எப்படி?

Operator precedence ஐ மாற்ற முடியுமா?

முன்னுரிமை பட்டியலின் படி evaluate செய்யும்போது * முதலிலும் + அடுத்தும் எடுத்துக்கொள்ளப்பட்டு நமக்கு விடை கிடைத்தது. ஆனால் சில வேளைகளில் + முதலிலும் * அடுத்தும் evaluate செய்யப்படவேண்டும் என்ற நிர்பந்தம் ஏற்படும். அதை எப்படி செய்வது?

உங்கள expression ஐ இப்படி மாற்றிவிடுங்கள்.

 ( 8 + 5 ) * 2

என்று நீங்கள் எழுதினால் ( 8 + 5 ) முதலில் evaluate செய்யப்பட்டு அடுத்து வரும் விடையோடு 2 பெருக்கப்பட்டு விடை கிடைக்கும்.

அதாவது 13 * 2 = 26

என்ன உங்கள் பிரச்சினை தீர்ந்ததா? சரி அடைப்புக்குறிகளுக்கு இங்கென்ன வேலை என்கிறீர்களா? Rules of precedence களை parentheses மூலம் மாற்றிவிடமுடியும். Expression னில் அடைப்புக்குறி இருந்தால் அனைத்தையும் விடவும் அதுதான் முன்னுரிமை பெருகிறது. அடைப்புக்குறிக்குள் இருப்பவை முதலில் evaluate செய்யப்பட்டு அதன் விடை ஒரு operand ஆக மாற்றப்படுகிறது. இதைத்தான் ஆங்கிலத்தில் overriding operator precedence என்று குறிப்பிடுவார்கள்.

( 8 + 5 ) * 2 என்று எழுதியதை
computer 13 * 2 என்று மாற்றியதல்லவா? அதன் சூட்சுமம் இதுதான்.

எனவே நீங்கள் program செய்யப்போகும் language உடைய Rules of precedence / Operator precedence ஐ அவசியம் தெரிந்து வைத்திருக்க வேண்டும்.

அடைப்புக்குறிகளை ( ) பயன்படுத்துவதால் கிடைக்கும் பலன்கள்:

அடைப்புக்குறி போடுவது expression ஐ புரிந்துகொள்ள நமக்கும் எளிதாக இருக்கும், அதோடு கணிணி எப்படி அதை evaluate செய்யப்போகிறது என்பதை நம்மால் தீர்மானிக்கவும் முடியும்.

சில வேளைகளில் அடைப்புக்குறி தேவையில்லாத போதும் நமது புரிதலுக்காக பயன்படுத்துவது தவறாகாது.

உதாரணத்திற்கு

8 + 5 * 2 என்பதன் விடையை computer 18 என்று காண்பிக்கும். இதை நீங்கள் சரி என்று ஒத்துக்கொண்டீர்கள் என்று வைத்துக்கொள்வோம். ஆனால் rules of precedence ஐ பற்றி அறியாதவர் இதை evaluate செய்யும்போது 26 என்று சொல்ல வாய்ப்பு உள்ளது. அவருக்கு புரிய வைக்க இப்படி எழுதினால் குழப்பம் தீர்ந்துவிடும்

X + ( Y * Z )

8 + ( 5 * 2 ) விடை 8 + 10 விடை 18.

இதிலிருந்து என்ன தெரிகிறது?

X + Y * Z என்பதற்கும் X + ( Y * Z ) என்பதற்கும் computer ரின் விடையில் ஒரு வித்தியாசமும் இல்லையென்றபோதும் programmer ரின் புரிதலுக்காக அடைப்புக்குறிகளை பயன்படுத்துவது தவறல்ல என்பதுதான்.

குறிப்பு:

நான் Embarcadero Delphi (முன்னர் இது Borland Delphi யாக இருந்தது)  பயன்படுத்துவதால் என்னுடைய உதாரணங்களில் பெரும்பாலானவை Delphi (Pascal Language) யில் இருக்கும் என்பதை அறியவும். அடுத்து, இத்தொடரில் நான் Delphi ஐ உங்களுக்கு கற்றுத்தரவில்லை மாறாக Programming தான் கற்றுத்தருகிறேன் என்பதையும் நினைவில் கொள்ளவும்.

தண்ணீரில் எப்படி நீந்துவது என்ற பயிற்சியை கற்றுக்கொண்டபின் ஆறு, குட்டை, குளம், ஏரி, கடல் அல்லது வேறு எந்த நீர்நிலைக்கு போனாலும் அதற்குத் தகுந்த மாதிரி நீந்துவீர்கள்தானே அதைப்போன்றதுதான் இத்தொடரும்.

ஆகவே Programming அடிப்படைகளை கற்றுக்கொண்டபிறகு உங்களுக்கு பிடித்தமான Programming Language ஐ தேர்வு செய்து நீங்களும் Programmer ஆகலாம்.

No comments:

Post a Comment