தொகுப்புகள்
பட்டியல்கள், டப்பில்கள், திறவுச்சொல் பட்டிகள், மேப்புகள்.
பட்டியல்கள்
மதிப்புகளின் தொகுப்பு பட்டியல் எனப்படும். ஒரு பட்டியல் ஒன்றுக்கு மேற்பட்ட தரவினங்களின் மதிப்பைக்கொண்டிருக்கலாம். ஒரு மதிப்பு, பட்டியலில் எத்தனைமுறைவேண்டுமானாலும் வரலாம்:
iex> [3.14, :pie, "Apple"]
[3.14, :pie, "Apple"]
இணைப்பு பட்டியைப்பயன்படுத்தி, எலிக்சர், பட்டியலை செயல்படுத்துகிறது. இதனால், ஒரு பட்டியலின் nம் இடத்திலுள்ள மதிப்பை அணுகுவது O(n)
செயல்பாட்டுக்கு உட்பட்டது. இதனால், பட்டியலின் இறுதியில் ஒரு மதிப்பை இணைப்பதை விட பட்டியலின் தொடக்கத்தில் சேர்ப்பது எளிமையானது:
iex> list = [3.14, :pie, "Apple"]
[3.14, :pie, "Apple"]
iex> ["π" | list]
["π", 3.14, :pie, "Apple"]
iex> list ++ ["Cherry"]
[3.14, :pie, "Apple", "Cherry"]
பட்டியல் இணைப்பு
பட்டியல்களை இணைக்க ++/2
செயல்பாட்டைப்பயன்படுத்தலாம்:
iex> [1, 2] ++ [3, 4, 1]
[1, 2, 3, 4, 1]
இங்கே செயல்பாட்டின் குறியீட்டுவடிவம் (++/2
) குறித்து ஒரு சிறுகுறிப்பைக்காணலாம்: எலிக்சரிலும், எர்லாங்கிலும் (எர்லாங்க் மீது எலிக்சர் கட்டமைக்கப்பட்டுள்ளது) ஒரு செயற்கூறு அல்லது செயல்பாட்டின் பெயரில் இரண்டு பகுதிகள் உள்ளன: அதன் பெயரும் (++
), உருபுகளின் எண்ணிக்கையும். எலிக்சரின் நிரல்குறித்து பேசும்போது உருபுகளின் எண்ணிக்கை முக்கியமான ஒன்றாகும். ஒரு செயற்கூறு ஏற்றுக்கொள்கின்ற உள்ளீட்டு செயலுருபுகளின் எண்ணிக்கையை இது குறிக்கிறது. உருபுகளின் எண்ணிக்கையும், பெயரையும், ஒரு முன்சாய்வுக்குறியீட்டைக்கொண்டு இணைத்து எழுதவேண்டும். இதைப்பற்றி பிறிதொரு பகுதியில் விரிவாகப்பார்க்கலாம். தற்சமயம் செயல்பாட்டுக்குறியீட்டைப்புரிந்துகொள்ள இந்த அறிமுகம் போதுமானது.
பட்டியலிலிருந்து கழித்தல்
இரு பட்டியல்களைக்கழிக்க --/2
என்ற செயல்பாட்டைப்பயன்படுத்தலாம். பட்டியலில் இல்லாத உருப்படிகளைக்கழித்தாலும் பிழையில்லை:
iex> ["foo", :bar, 42] -- [42, "bar"]
["foo", :bar]
கழித்தலின்போது இரட்டைமதிப்புகள் குறித்து கவனமாக இருக்கவேண்டும். வலப்பக்கத்திலுள்ள ஒவ்வொரு உறுப்புக்கும், இடப்பக்கத்திலிருந்து முதலில்வரும் அவ்வுறுப்பின் மதிப்பு நீக்கப்படும்:
iex> [1,2,2,3,2,3] -- [1,2,3,2]
[2, 3]
குறிப்பு: கழித்தலின்போது உறுப்புகளைக்கண்டறிய, கண்டிப்பான ஒப்பீட்டுமுறை பயன்படுத்தப்படுகிறது.
தலை / உடல்
பட்டியல்களைப்பயன்படுத்தும்போது, அவற்றின் தலை மற்றும் உடல் பகுதிகளைப்பயன்படுத்துவது பொதுவான ஒன்றாகும். ஒரு பட்டியலின் முதல் உறுப்பு தலை என்றழைக்கப்படுகிறது. தலை நீங்கலாக, பட்டியலின் பிற உறுப்புகளின் பட்டியல் உடல் என்றழைக்கப்படுகிறது. hd
, tl
என்ற இரு செயல்பாடுகள், முறையே, ஒரு பட்டியலின் தலை / உடல் பகுதிகளைப்பெற பயன்படுத்தப்படுகிறது:
iex> hd [3.14, :pie, "Apple"]
3.14
iex> tl [3.14, :pie, "Apple"]
[:pie, "Apple"]
மேற்குறிப்பிட்ட செயல்பாடுகளைத்தவிர, பாங்குபொருத்தும் முறையையும், குழாய் குறியீட்டையும் ( |
)பயன்படுத்தி ஒரு பட்டியலின் தலை, உடல் பகுதிகளைப்பிரிக்கலாம். பாங்குகளைப்பற்றி பின்வரும் பாடங்களில் அறிந்துகொள்ளலாம்:
iex> [head | tail] = [3.14, :pie, "Apple"]
[3.14, :pie, "Apple"]
iex> head
3.14
iex> tail
[:pie, "Apple"]
டப்பில்கள்
பட்டியலைப்போலவே, டப்பில்களும், பல்வேறு மதிப்புகளின் தொகுப்பு ஆகும். ஆனால், அவை நினைவகத்தில் தொடர்ச்சியாக சேமிக்கப்படுவதால், அவற்றின் உருப்படிகளை எளிதில் அணுகமுடியும். ஆனால், அவற்றை மாற்றுவது விரயமானது; டப்பில் முழுவதையும் நினைவகத்திலிருந்து ஏற்றி, மாற்றங்களைச்செய்யவேண்டும். டப்பில்களை சுருள் அடைப்புக்குள் வரையறுக்கவேண்டும்:
iex> {3.14, :pie, "Apple"}
{3.14, :pie, "Apple"}
செயற்கூறுகளிலிருந்து ஒன்றுக்குமேற்பட்ட மதிப்புகளை திருப்பியனுப்புவதற்கு டப்பில்கள் பெரும்பாலும் பயன்படுகின்றன. பாங்குகளைப்பொருத்துவது பற்றி படிக்கும்போது இதன் பயன்பாடு குறித்து அறிந்துகொள்ளலாம்:
iex> File.read("path/to/existing/file")
{:ok, "... contents ..."}
iex> File.read("path/to/unknown/file")
{:error, :enoent}
திறவுச்சொல் பட்டியல்
திறவுச்சொல் பட்டிகளும், மேப்புகளும் எலிக்சரின் இயைபுத்தொகுப்புகள் ஆகும். ஒவ்வொரு உருப்படியிலும் இரண்டுகூறுகள்கொண்ட சிறப்பு டப்பில்களுக்கு திறவுச்சொல்பட்டி என்று பெயர். இதன் முதற்கூறு ஒரு அணுவாக இருக்கவேண்டியது அவசியம். இதன் செயல்திறன் பட்டியலின் செயல்திறனுக்கு இணையானதாகும்:
iex> [foo: "bar", hello: "world"]
[foo: "bar", hello: "world"]
iex> [{:foo, "bar"}, {:hello, "world"}]
[foo: "bar", hello: "world"]
கீழ்கண்ட மூன்று அம்சங்கள், இவ்வகை தொகுப்பின் முக்கியத்துவத்தை பறைசாற்றும்:
- அணுக்களே திறவுச்சொற்களாக உள்ளன.
- திறவுச்சொற்கள் வரிசைப்படுத்தப்பட்டுள்ளன.
- ஒரே திறவுச்சொல்கொண்ட ஒன்றுக்குமேற்பட்ட உருப்படிகள் இருக்கலாம்.
இக்காரணங்களுக்காக, செயல்கூறுகளுக்கு தெரிவுகளையனுப்ப இவை பயன்படுகின்றன.
மேப்புகள்
பொதுவாக அனைவராலும் பயன்படுத்தப்படும் “திறவுச்சொல்-மதிப்பு” அமைப்புகொண்ட தொகுப்பாக மேப்புகள் உள்ளன. திறவுச்சொல்பட்டிகளைப்போல இல்லாமல், இவற்றின் திறவுச்சொற்கள் எந்த தரவினத்தைச்சேர்ந்ததாகவும் இருக்கலாம். மேலும், திறவுச்சொற்கள் வரிசைப்படுத்தப்படுவதில்லை. %{}
என்ற குறியீட்டுக்குள் மேப்புகள் வரையறுக்கப்படுகின்றன:
iex> map = %{:foo => "bar", "hello" => :world}
%{:foo => "bar", "hello" => :world}
iex> map[:foo]
"bar"
iex> map["hello"]
:world
எலிக்சர் 1.2 பதிப்பின்படி, மாறிகளையும் திறவுச்சொற்களாக பயன்படுத்தலாம்:
iex> key = "hello"
"hello"
iex> %{key => "world"}
%{"hello" => "world"}
ஒரே திறவுச்சொல்லைக்கொண்ட இரு மதிப்புகள் வரையறுக்கப்பட்டிருப்பின், கடைசியாக கொடுக்கப்பட்ட மதிப்பு மட்டுமே ஏற்கப்படும்:
iex> %{:foo => "bar", :foo => "hello world"}
%{foo: "hello world"}
மேற்கண்ட எடுத்துக்காட்டில் உள்ளதுபோல, அணுக்களை மட்டுமே திறவுச்சொற்களாகக்கொண்ட மேப்புகளுக்கு சிறப்புத்தொடரியலைப்பயன்படுத்தலாம்:
iex> %{foo: "bar", hello: "world"}
%{foo: "bar", hello: "world"}
iex> %{foo: "bar", hello: "world"} == %{:foo => "bar", :hello => "world"}
true
மேப்புகளை இற்றைப்படுத்துவதற்காகவும் ஒரு சிறப்புத்தொடரியல் இருப்பது சுவாரசியமானது:
iex> map = %{foo: "bar", hello: "world"}
%{foo: "bar", hello: "world"}
iex> map.hello
"world"
மேப்புகளை இற்றைப்படுத்துவதற்காகவும் ஒரு சிறப்புத்தொடரியல் இருப்பது சுவாரசியமானது:
iex> map = %{foo: "bar", hello: "world"}
%{foo: "bar", hello: "world"}
iex> %{map | foo: "baz"}
%{foo: "baz", hello: "world"}
Caught a mistake or want to contribute to the lesson? Edit this lesson on GitHub!