ឧសភា
មេរៀនទី ១១៖ Functions
→ ប្អូនៗជានិស្សិត IT គួរតែស្វែងយល់ពីបច្ចេកវិទ្យាបន្ថែមមិនគួររៀនតែតាមមុខវិជ្ផានៅសាលាតែប៉ុណ្ណោះទេ
→ មេរៀនទី១១៖ នេះនឹងនាំឲ្យអ្នកដឹងនូវចំណុចដូចខាងក្រោម៖
- ហេតុផលតម្រូវការចាំបាច់ប្រើប្រាស់ functions នៅក្នុង programs
- អ្វីទៅជា function prototypes និង function definition
- អ្វីទៅជា functions មិនផ្ដល់តម្លៃ
- អ្វីទៅជា functions ផ្ដល់តម្លៃ
- ការប្រើប្រាស់ parameters
- ការប្រើប្រាស់ static variables
- អ្វីទៅជា overloading functions
- Recursive functions
♦ មូលហេតុនៃការមាន Functions ?
ការពិតទៅបើនិយាយពី functions អ្នកអាចនឹងគិតថាវាជារឿងថ្មី ហើយមិនធ្លាប់បានធ្វើការជាមួយពួកវាពីមុនឡើយ ។ ក៏ ប៉ុន្តែប្រហែលជាមិនដូច្នេះពេកទេ ការពិតទៅអ្នកប្រាកដជាធ្លាប់បាន អនុវត្តន៍រួចហើយនៅក្នុងកូដទាំងឡាយ ដែលអ្នកបានសិក្សានៅក្នុងមេរៀនមុនៗ យ៉ាងហោចក៏មាន function មួយដែលអ្នកបានអនុវត្តន៍កន្លងមកដែលមាននៅក្នុងគ្រប់ programs គឺ main () function ។
ជាបឋមមុននឹងខ្ញុំលើកយកពីទម្រង់ទូទៅ ឬក៏វិធាននៃការបង្កើត functions នៅក្នុងភាសា C++ ខ្ញុំសូមបង្ហាញពីហេតុផល ឬក៏អត្ថប្រយោជន៍នៃការប្រើប្រាស់ functions នៅក្នុង programs របស់អ្នកជាមុនសិន ។
ដូចអ្នកបានដឹងហើយថា កុំព្យូទ័រអាចដោះស្រាយ និងគ្រប់គ្រងការងារទាំងឡាយរបស់មនុស្ស រាប់តាំងពីការងារដ៏តូចតាច រហូតដល់ការងារគ្រប់គ្រងប្រទេសមួយ ឬពិភពលោកជាដើម ។ ដូច្នេះទំហំនៃការសរសេរកូដគឺវាអាចតិច ឬច្រើនក៏អាស្រ័យដោយប្រភេទនៃកម្មវិធីនេះផងដែរ មួយវិញទៀតខ្ញុំចង់ឲ្យអ្នកគិតថាបើសិនជាអ្នកចូលទៅក្នុងបន្ទប់មួយពោរពេញទៅដោយសៀវភៅ ហើយដាក់លាយឡំគរចូលគ្នា ប៉ុន្តែអ្នកចង់ធ្វើការស្វែងរកសៀវភៅមួយក្បាលមានចំណងជើងថា “ការសិក្សា Programing C++ ជាមួយ ANT” ប្រាកដណាស់ថា វានឹងមិនមានភាពងាយស្រួលសម្រាប់អ្នកនោះឡើយ ព្រោះអ្នកចាំបាច់ត្រូវរើសៀវភៅក្នុងគំនរទាំងនោះម្ដងមួយៗ ហើយពិនិត្យមើលពួកវាឲ្យបានច្បាស់លាស់ ទើបអ្នកនឹងអាចរកសៀវភៅដែលអ្នកចង់បានឃើញ ដូច្នេះអ្នកចាំបាច់ គឺត្រូវចំណាយពេលយូរក្នុងការស្វែងរកសៀវភៅមួយក្បាលនេះ បន្ទាប់ពីអ្នកអានសៀវភៅនេះរួចហើយ អ្នកប្រាកដជាត្រូវដាក់វាចូលទៅក្នុងគំនរនោះវិញជាពុំខាន ព្រោះដោយសារក្នុងបន្ទប់នោះ គឺគ្មានបែងចែកទូរសម្រាប់សៀវភៅតាមផ្នែកនីមួយៗឡើយ ហេតុនេះវានឹងនាំឲ្យអ្នក ឬក៏អ្នកដទៃផ្សេងទៀតត្រូវចំណាយពេលយូរជាដ៏រាបរៀងរាល់ពេលដែលអ្នកទាំងពួងត្រូវការសៀវភៅណាមួយ ដើម្បីអាន ទោះបីជាសៀវភៅនោះអ្នកក៏ធ្លាប់បានយកមកអានម្ដង ឬច្រើនដងក៏ដោយ ក៏អ្នកយ៉ាងហោចណាស់ត្រូវចំណាយពេលដដែល ។
ដូចគ្នាផងដែរបើសិនជាកូដនៃ program មួយត្រូវបានសរសេរឡូកឡំលាយចូលគ្នា វានឹងមិនមានភាពងាយស្រួលសម្រាប់អ្នកនោះឡើយ វានឹងផ្ដល់នូវបញ្ហាដល់អ្នកដូចខាងក្រោម៖
- ស្មុកស្មាញពិបាកមើលកូដឡើងវិញពេលដែលចង់កែរកំហុស ឬក៏ធ្វើការបំពេញបន្ថែមនូវ ចំណុចខ្វះខាតរបស់កូដទៅលើផ្នែកណាមួយនៃការងាររបស់ programs
- នឹងបណ្ដាលឲ្យមានការសរសេរកូដដដែលៗសម្រាប់ការដោះស្រាយបញ្ហាអ្វីមួយដដែលៗ ដូច្នេះវានឹងធ្វើឲ្យអ្នកចំណាយពេលយូរក្នុងការវាយបញ្ចូលកូដ ក៏ដូចជាការកែតម្រូវបញ្ហាទាំងនោះ
- នឹងធ្វើឲ្យ source code មានទំហំធំដោយសារការសរសេរកូដច្រើន
- នឹងអាចធ្វើឲ្យ programs ដំណើរការយឺត
- ពិបាកសម្រាប់ការងារជាក្រុម
- អាចងាយស្រួលដល់ក្រុមបំបែកកូដ (ការធ្វើ reverse engineering)
ហេតុដូច្នេះហើយបានជាសំណង់ software នីមួយៗតម្រូវឲ្យអ្នកចេះប្រើប្រាស់ និងបង្កើត functions ។
♦ អ្វីទៅជា Functions ?
Functions គឺជាបណ្ដុំនៃ statements ឬក៏អាចហៅថា subprogram ដែលនឹងដោះស្រាយការងារជាក់លាក់ណាមួយនៅក្នុង program ទាំងមូល ។ នៅពេលដែល programs របស់អ្នកមានចំនួនកូដ ដែលត្រូវសរសេរច្រើនក្នុងគោលបំណងដោះស្រាយការងារដែលមានទំហំធំ ឬស្មុកស្មាញ ឬក៏មានដំណាក់កាលលំដាប់លំដោយនៃការដោះស្រាយបញ្ហាច្រើន គឺចាំបាច់ណាស់ដែលអ្នកត្រូវតែបំបែកបញ្ហាទាំងនោះជាកង់តូចៗទៅតាមបញ្ហាដែលត្រូវដោះស្រាយ ហើយយកមកផ្គុំចូលគ្នាវិញទៅតាមលំដាប់ ការធ្វើបែបនេះបាន គឺមានន័យថាអ្នកត្រូវតែបង្កើត functions ដើម្បីតំណាងឲ្យការដោះស្រាយបញ្ហាកង់តូចៗទាំងនោះ ។
ដូច្នេះហើយ functions គឺជាមធ្យោបាយមួយដែលផ្ដល់ឲ្យអ្នកអាចពុះបំបែកបញ្ហាធំ ឲ្យទៅជាបញ្ហាតូចៗ ដែលអ្នកអាចហៅវាយកមកប្រើនៅពេលណាមួយក៏បាន ហើយថែមទាំងអាចប្រើវាបានច្រើនដងទៀតផងដោយមិនចាំបាច់សរសេរកូដឡើងវិញពេលណាដែលបញ្ហានោះត្រូវបានជួបប្រទះជាថ្មី ។
ដើម្បីឲ្យអ្នកងាយយល់ពីអត្ថប្រយោជន៍ជាមូលដ្ឋាននៃតម្រូវការបង្កើត និងប្រើប្រាស់ functions នៅក្នុង programs សូមអ្នកសិក្សាកូដ១១.១ ដូចខាងក្រោម៖
កូដ១១.១ មានបំណងពន្យល់អ្នកនូវមូលហេតុដែលអ្នកគួរតែបង្កើត functions នៅក្នុង programs របស់អ្នក ។ បើពិនិត្យមើលក្នុងកូដ១១.១ អ្នកមិនបានឃើញខ្ញុំបង្កើត function ណាមួយក្រៅពី main () function ដែលជា function ចាំបាច់ត្រូវតែមាននៅក្នុងកូដភាសា C++ នោះទេ ។ នៅក្នុង main () អ្នកបានឃើញទិដ្ឋភាពពីរនៃការសរសេរកូដ គឺទីមួយអ្នកបានឃើញពីការ output “Hi! ” ដែលជាការស្វាគមន៍ពីមនុស្សផ្សេងៗគ្នាទៅដល់មនុស្សម្នាក់ឈ្មោះ Kanha និងទិដ្ឋភាពមួយផ្សេងទៀតគឺជាការ output នៃសំដីឆ្លើយតបដូចៗគ្នាទៅកាន់មនុស្សទាំងឡាយដែលបាននិយាយ “Hi! ” ទៅកាន់ Kanha ។ ដូច្នេះបើអ្នកពិនិត្យកូដនៅបន្ទាត់ទី៦ដល់ទី៨, បន្ទាត់ទី១១ដល់ទី១៣, បន្ទាត់ទី១៦ដល់ទី១៨, បន្ទាត់ទី២១ដល់ទី២៣ និងបន្ទាត់ទី២៦ដល់ទី២៨ គឺអ្នកនឹងបានឃើញកូដចំនួនបីបន្ទាត់គឺ៖
កូដទាំងបីបន្ទាត់នេះគឺតែងតែសរសេរដដែលៗរៀងរាល់ពេលដែល Kanha បានឆ្លើយតបទៅកាន់អ្នកទាំងឡាយដែលបាននិយាយ “Hi! ” ទៅកាន់នាង ។ ដូច្នេះគឺមានន័យថាខ្ញុំត្រូវចំណាយការ សរសេរកូដដដែលៗសម្រាប់ការឆ្លើយតបរបស់ Kanha ទៅកាន់អ្នកដទៃ ជាពិសេសបើសិនជាខ្ញុំចង់ឲ្យ program នេះធ្វើការផ្លាស់ប្តូរប្រយោគ " Kanha: It's nice to meet you." ទៅជា " Kanha: It's nice to see you." វិញ នោះគឺខ្ញុំត្រូវតែធ្វើការផ្លាស់ប្ដូរគ្រប់ពាក្យ “meet” ទៅជាពាក្យ “see” នៅបន្ទាត់ទី៧, បន្ទាត់ទី១២, បន្ទាត់ទី១៧, បន្ទាត់ទី២២, និងបន្ទាត់ទី២៧ ។ ឃើញទេនេះគ្រាន់តែជា program កម្រិតតូចមួយផង គឺខ្ញុំត្រូវចំណាយពេលនៃការសរសេរកូដដដែលៗ នឹងត្រូវចំណាយពេលច្រើនកន្លែងដែលត្រូវកែបែបនេះ ចុះបើ programs មានទំហំធំ និងការងារដែលត្រូវដោះស្រាយមានភាពស្មុកស្មាញច្រើនវិញ តើខ្ញុំនឹងត្រូវចំណាយពេលច្រើនបែបណាសម្រាប់ការសរសេរកូដ ដែលនឹងធ្វើអ្វីដដែលៗ ឬក៏មានការកែបន្ថែមអ្វីមួយនោះ? បញ្ហាពិបាកទាំងនេះ ក៏មកពីខ្ញុំមិនបានប្រមូលផ្ដុំការងារនីមួយៗឲ្យទៅជាការប្រើប្រាស់បែប functions ។
ឥឡូវនេះអ្នកអាចធ្វើការប្រៀបធៀបកូដ១១.១ និងកូដ១១.២បន្ទាប់នេះ តើកូដមួយណា ផ្ដល់នូវភាពងាយស្រួលដល់អ្នក programmers ហើយធ្វើការបានលឿនជាង?
កូដ១១.១ និងកូដ១១.២ គឺមានលទ្ធផល output ដូចគ្នា ក៏ ប៉ុន្តែទម្រង់នៃការសរសេរកូដគឺមានភាពខុសគ្នា ។ កូដ១១.២ គឺខ្ញុំបានបង្កើត function មួយឈ្មោះថា KanhaSay () ដែលបានប្រមូលផ្ដុំនូវ statements ចំនួនបី ដែលជាការឆ្លើយតបរបស់ Kanha ទៅកាន់អ្នកដទៃ គឺ៖
ដូច្នេះរាល់ការឆ្លើយតបរបស់ Kanha ទៅកាន់អ្នកដទៃក្រោយពីការនិយាយ “Hi! ” របស់ពួកគេ គឺខ្ញុំមិនចាំបាច់សរសេរកូដដដែលៗនូវ បី statements ខាងលើនោះទេ គឺខ្ញុំគ្រាន់តែហៅ function មួយឈ្មោះថា KanhaSay () ដែលជាពាក្យមួយតំណាងឲ្យបី statements ខាងលើនេះជាការគ្រប់គ្រាន់ ។ លើសពីនេះបើសិនជាខ្ញុំចង់ផ្លាស់ប្តូរប្រយោគ " Kanha: It's nice to meet you." ទៅជា " Kanha: It's nice to see you." នោះគឺខ្ញុំគ្រាន់តែផ្លាស់ប្តូរពាក្យ “meet” ទៅជាពាក្យ “see” វិញនៅត្រង់បន្ទាត់ទី៧តែមួយកន្លែងប៉ុណ្ណោះ ។
♦ អ្វីទៅជា Function Definition ?
Function definition គឺសំដៅលើការសរសេរ statements ផ្សេងៗដែល functions នោះត្រូវធ្វើ ។ Statements ទាំងនោះគឺត្រូវស្ថិតនៅក្នុងផ្នែក body ឬហៅថា block របស់ functions នោះ ។ សូមមើលរូប Pic11.1 បង្ហាញពី function definition របស់ function KanhaSay () ៖
Function definitions នឹងត្រូវបានអនុវត្តន៍ (executed) លុះត្រាតែឈ្មោះ functions នោះត្រូវបានហៅនៅទីតាំងណាដែលចង់ឲ្យវាអនុវត្តន៍ ដែលគ្រប់គ្នាហៅថា function call ។ នៅក្នុងភាសា C++ គឺមានតែ function main () មួយប៉ុណ្ណោះ ដែលត្រូវបាន executed ដោយមិនចាំបាច់អ្នក programmers ហៅវានោះឡើយ ពោលគឺវាត្រូវបានអនុវត្តន៍ដោយស្វ័យប្រវត្តពេលដែល programs នោះដំណើរការ ។
ដូចគ្នានឹងរូប Pic11.1 គឺគ្រប់ function definitions ទាំងអស់ត្រូវផ្គុំឡើងដោយពីរផ្នែក គឺផ្នែក function header និងផ្នែក function body ។
Function header
Function header ហៅថាក្បាលរបស់ function គឺជាផ្នែកនៅលើគេបំផុតនៃ function definition វាត្រូវបានបែងចែកជាបីផ្នែក គឺ៖
1- Return type value ជាផ្នែកដែលបញ្ជាក់ពីប្រភេទទិន្នន័យ (data type) របស់ functions ដែលត្រូវផ្ដល់ត្រឡប់មកវិញ (return) ទៅកាន់ statement ដែលបានហៅ function នោះ ក្រោយពី function ហ្នឹងបាន executed ចប់ ។ Return type អាចជា data type ផ្សេងៗដូចគ្នានឹងអ្នកធ្លាប់បានប្រើជាមួយ variables កន្លងមក ។
2- Function name ជាផ្នែកបញ្ជាក់ពីឈ្មោះ function ដែលត្រូវបង្កើត ។ គោលការណ៍នៃការដាក់ឈ្មោះឲ្យ functions គឺអនុវត្តន៍ដូចគ្នានឹងគោលការណ៍នៃការដាក់ឈ្មោះ variables ។
3- Function parameter គឺជាផ្នែកចាប់ពីសញ្ញារង្វង់ក្រចកដែលនៅពីក្រោយផ្នែក function name ។ នៅក្នុងសញ្ញារង្វង់ក្រចកអាចមាន parameters មួយ ឬច្រើន ឬក៏គ្មានតែម្ដងអាស្រ័យដោយការងាររបស់ functions ។ អ្នកនឹងសិក្សាពីការប្រើប្រាស់ function parameters នៅក្នុងផ្នែកដទៃទៀតនៃមេរៀននេះ ។
Function Body
Function body ហៅថាខ្លួនរបស់ function គឺជាផ្នែកបន្តពីផ្នែក function header ដែលចាប់ផ្ដើមដោយសញ្ញា { និងបញ្ចប់ទៅវិញដោយសញ្ញា } នៅក្នុងចន្លោះសញ្ញាទាំងពីរនេះគឺជាបណ្ដុំនៃ statements ដែលពាក់ព័ន្ធនឹងការងាររបស់ function ។ គេក៏អាចហៅ function body ថាជា block របស់ function ផងដែរ ។ ផ្នែកនេះនឹងត្រូវបានអនុវត្តន៍ នៅពេលណាដែល function ត្រូវទទួលបានការហៅប្រើ នៅក្នុងផ្នែកណាមួយនៃ program ។
♦ អ្វីទៅជា Function Prototype ?
Function prototype គឺស្រដៀងគ្នានឹង function header បន្តែខុសគ្នាត្រង់ថា function prototype គឺមានសញ្ញា ; (semicolon) នៅខាងចុង ហើយពុំមានបន្តដោយផ្នែក function body ឡើយ ។
→ សម្រាប់អត្តបទទាំងស្រុងនៃមេរៀនទី ១១ មានចំនួន ៧៨ទំព័រ នេះសូមអ្នកទាំងអស់គ្នាចូលទៅ Download កម្មវិធី ANTLearner សម្រាប់ Android & Windows តាម Link ខាងក្រោម ៖ http://www.antclasses.com/help/page/download.html
→ សម្រាប់មេរៀន C++ ក្នុងកម្មវិធី ANTLearner សរុបមានចំនួន ១២មេរៀន គិតត្រឹមខែឩសភា ឆ្នាំ ២០២០ នឹងមានចំនួន ៥៤៥ទំព័រ Link Download សម្រាប់ Android https://play.google.com/store/apps/details?id=com.antkh.antlearning
ក្នុងនោះផងដែរកម្មវិធី ANTLearner និងចូលរួមចំណែកយ៉ាងសកម្ម ក្នុងការបង្រៀនវគ្គ online learning នៅអាន -ANT ដោយសិស្ស គ្រាន់តែប្រើប្រាស់ ID ដែលប្អូនៗបានចុះឈ្មោះរៀននៅអាន -ANT ដើម្បីទាញយកវីឌីអូ ឬឯកសាផ្សេងៗដែលគ្រូ ឬសាលាបានផ្ដល់ឲ្យបំពេញ បន្ថែមនូវការង្រៀនតាមរយៈonline របស់យើងខ្ញុំ ។
→ ទាញយកកម្មវិធី ANTLearner http://www.antclasses.com/help/page/download.html
១. សម្រាប់លោកអ្នកដែលចង់បានអត្ថបទ ចំណេះដឹង ឬវគ្គសិក្សាបើកថ្មីៗនៅអាន-ANT សូមចុច Like លើ Page
https://www.facebook.com/ant.com.kh & https://www.facebook.com/anttrainning
២. ប្រសិនបើលោកអ្នកចង់តាមដាន ឬមានចម្ងល់ទាក់ទងនឹងកម្មវិធី ANTLearner ឬកម្មវិធីជាច្រើនទៀតបង្កើតដោយអាន-ANT សូមចុច Like https://www.facebook.com/ANTTechnologyTrainingCenter
៣. ប្រសិនបើលោកអ្នកមានបំណងចែករំលែងចំណេះដឹង IT ដល់សមាជិកដទៃសូមចូលទៅកាន់ Group https://www.facebook.com/groups/ANTTrGroup/
៤. ប្រសិនបើមានចង្ងល់ ឬមានសំណួរផ្សេងៗសូមផ្ញើសារចូល Facebook : https://www.facebook.com/anttrainning
→ លេខទូរសព្ទទំនាក់ទំនង ០១០/០១៦ ៦៦៦ ៦៥៣
💒ទីតាំង #86B ផ្លូវ 313 កែង 606 សង្កាត់បឹងកក់២ ទួលគោក
មតិ និងយោបល់ទៅលើអត្ថបទនេះ (តាម Facebook)
ខាងក្រោមនេះជាយោបល់ផ្សេងៗរបស់អ្នកទស្សនា