លំហសិក្សាធិការកម្ពុជា
V1.0
មេរៀននេះណែនាំអំពីអញ្ញតិ (Variable) ដែលសំដៅលើតម្លៃអថេរ ឬទីតាំងមានឈ្មោះសម្រាប់រក្សាទុក និងគ្រប់គ្រងទិន្នន័យក្នុងកម្មវិធីភាសា C ។ អ្នកសិក្សានឹងស្វែងយល់ពីការប្រកាសអញ្ញតិ ការកំណត់តម្លៃដំបូង ការផ្លាស់ប្តូរតម្លៃ ការជ្រើសរើសប្រភេទទិន្នន័យ ការដាក់ឈ្មោះ និងការបញ្ចូល–បង្ហាញទិន្នន័យ ព្រមទាំងអនុវត្តលំហាត់ដើម្បីជៀសវាងកំហុសដែលជួបញឹកញាប់។
នៅក្នុងការសរសេរកម្មវិធី កម្មវិធីត្រូវការកន្លែងនៅក្នុងអង្គចងចាំ ដើម្បីរក្សាទុកទិន្នន័យផ្សេងៗ ដូចជា ឈ្មោះ អាយុ ពិន្ទុ តម្លៃទំនិញ ឬស្ថានភាពពិត និងមិនពិត។ កន្លែងផ្ទុកទិន្នន័យដែលមានឈ្មោះ និងត្រូវបានបង្កើតនៅក្នុងអង្គចងចាំនេះ ហៅថា អញ្ញតិ (Variable)។
ពាក្យ «អញ្ញតិ» អាចពន្យល់តាមន័យថា ជា អថេរ ព្រោះតម្លៃដែលផ្ទុកនៅក្នុងវាអាចផ្លាស់ប្ដូរបាន ខណៈពេលកម្មវិធីកំពុងដំណើរការ។

យើងអាចប្រៀបធៀបអញ្ញតិទៅនឹងប្រអប់ផ្ទុកទិន្នន័យមួយ ដែលមានធាតុសំខាន់ៗដូចខាងក្រោម៖
int score = 80;
បន្ទាត់កូដនេះអាចពន្យល់បានដូចខាងក្រោម៖
int ជាប្រភេទទិន្នន័យចំនួនគត់។score ជាឈ្មោះអញ្ញតិ។80 ជាតម្លៃដំបូង។= ជាប្រមាណវិធីផ្ដល់តម្លៃ (Assignment Operator) ដែលយកតម្លៃនៅខាងស្ដាំទៅផ្ដល់ឱ្យអញ្ញតិនៅខាងឆ្វេង។ក្នុងភាសា C សញ្ញា = មិនមានន័យថា «ស្មើគ្នា» ដូចក្នុងគណិតវិទ្យាទេ។ ការប្រៀបធៀបថាតម្លៃពីរស្មើគ្នាឬអត់ ត្រូវប្រើ ==។
ប្រកាស → កំណត់តម្លៃដំបូង → ប្រើប្រាស់ → ផ្លាស់ប្ដូរតម្លៃ
ឈ្មោះ និងប្រភេទរបស់អញ្ញតិនៅដដែល ប៉ុន្តែតម្លៃដែលផ្ទុកនៅក្នុងវាអាចផ្លាស់ប្ដូរបាន។
ក្រោយបញ្ចប់មេរៀននេះ អ្នកសិក្សាអាច៖
scanf() និង printf()។| ពាក្យបច្ចេកទេស | ពាក្យខ្មែរ | អត្ថន័យខ្លី |
|---|---|---|
| Variable | អញ្ញតិ (អថេរ) | ឈ្មោះតំណាងឱ្យទីតាំងផ្ទុកតម្លៃក្នុងអង្គចងចាំ ហើយតម្លៃអាចផ្លាស់ប្ដូរបាន |
| Data Type | ប្រភេទទិន្នន័យ | កំណត់ប្រភេទ ដែនតម្លៃ និងរបៀបបកស្រាយទិន្នន័យ |
| Declaration | ការប្រកាស | ប្រាប់ Compiler អំពីប្រភេទ និងឈ្មោះអញ្ញតិ |
| Initialization | ការកំណត់តម្លៃដំបូង | ផ្ដល់តម្លៃនៅពេលប្រកាសអញ្ញតិ |
| Assignment | ការផ្ដល់តម្លៃ | ផ្ដល់ ឬផ្លាស់ប្ដូរតម្លៃក្រោយការប្រកាស |
| Identifier | អត្តសញ្ញាណសម្គាល់ | ឈ្មោះដែលអ្នកសរសេរកម្មវិធីកំណត់ឱ្យអញ្ញតិ អនុគមន៍ ឬធាតុផ្សេងៗ |
| Scope | វិសាលភាព | តំបន់កូដដែលអាចយោងទៅឈ្មោះអញ្ញតិបាន |
| Lifetime | អាយុកាល | រយៈពេលដែលអញ្ញតិមានវត្តមាននៅក្នុងអង្គចងចាំ |
រូបមន្តទូទៅ៖
data_type variable_name;
ឧទាហរណ៍៖
int age; float price; double distance; char grade;
ការប្រកាសនេះប្រាប់ Compiler ឱ្យរៀបចំកន្លែងនៅក្នុងអង្គចងចាំតាមប្រភេទទិន្នន័យ និងភ្ជាប់ទីតាំងនោះជាមួយឈ្មោះអញ្ញតិ។
ទោះជាយ៉ាងណា អញ្ញតិមូលដ្ឋានដែលប្រកាសនៅក្នុងអនុគមន៍ដោយមិនកំណត់តម្លៃដំបូង អាចមានតម្លៃមិនកំណត់ (Indeterminate Value)។ ដូច្នេះ មិនគួរអានតម្លៃរបស់វាមុនពេលផ្ដល់តម្លៃឡើយ។
int age; // ប្រកាស ប៉ុន្តែមិនទាន់កំណត់តម្លៃ age = 20; // ផ្ដល់តម្លៃក្រោយការប្រកាស int score = 80; // ប្រកាស និងកំណត់តម្លៃដំបូង
| កូដ | សកម្មភាព | សេចក្ដីពន្យល់ |
|---|---|---|
int score; | Declaration | ប្រកាសអញ្ញតិឈ្មោះ score ប្រភេទ int |
int score = 80; | Declaration + Initialization | ប្រកាស និងផ្ដល់តម្លៃដំបូង 80 |
score = 95; | Assignment | ផ្លាស់ប្ដូរតម្លៃរបស់ score ទៅជា 95 |
គន្លឹះសម្រាប់ការរៀន៖ គូរប្រអប់មួយ សរសេរ score ជាស្លាកនៅខាងក្រៅ និងសរសេរ 80 នៅខាងក្នុង។ បន្ទាប់មក ជំនួស 80 ដោយ 95 ដើម្បីយល់ថា ឈ្មោះអញ្ញតិនៅដដែល ប៉ុន្តែតម្លៃអាចផ្លាស់ប្ដូរ។
| ប្រភេទ | ប្រើសម្រាប់ | ឧទាហរណ៍ | Format Specifier ទូទៅ |
|---|---|---|---|
char | តួអក្សរមួយ | 'A' | %c |
int | ចំនួនគត់ | 25, -7 | %d |
unsigned int | ចំនួនគត់មិនអវិជ្ជមាន | 120U | %u |
float | ចំនួនទសភាគ | 3.5f | %f |
double | ចំនួនទសភាគដែលមានភាពជាក់លាក់ខ្ពស់ | 3.1415926 | %lf ក្នុង scanf() និង %f ក្នុង printf() |
_Bool ឬ bool | តម្លៃពិត ឬមិនពិត | true, false | ជាទូទៅបង្ហាញដោយ %d |
សម្រាប់ C ស្តង់ដារមុន C23 ការប្រើ bool, true និង false ត្រូវបញ្ចូល៖
#include <stdbool.h> bool is_active = true;
ទំហំរបស់ប្រភេទទិន្នន័យអាចខុសគ្នាតាម Compiler និងប្រព័ន្ធ។ គួរប្រើ sizeof ដើម្បីពិនិត្យ ជំនួសការសន្មត់។
#include <stdio.h> int main(void) { printf("Size of char : %zu byte(s)\n", sizeof(char)); printf("Size of int : %zu byte(s)\n", sizeof(int)); printf("Size of float : %zu byte(s)\n", sizeof(float)); printf("Size of double : %zu byte(s)\n", sizeof(double)); return 0; }
ឈ្មោះអញ្ញតិក្នុងភាសា C ត្រូវគោរពច្បាប់ខាងក្រោម៖
A–Z, a–z, លេខ 0–9 និងសញ្ញាគូសក្រោម _។_។-, @ និង #។int, return, if ឬ while។score, Score និង SCORE ជាឈ្មោះបីផ្សេងគ្នា។| ឈ្មោះ | ត្រឹមត្រូវ? | មូលហេតុ |
|---|---|---|
student_age | ត្រឹមត្រូវ | មានន័យច្បាស់ និងប្រើរចនាប័ទ្ម snake_case |
totalPrice | ត្រឹមត្រូវ | ប្រើរចនាប័ទ្ម camelCase |
2nd_score | មិនត្រឹមត្រូវ | ចាប់ផ្ដើមដោយលេខ |
total-price | មិនត្រឹមត្រូវ | មានសញ្ញា - |
float | មិនត្រឹមត្រូវ | ជាពាក្យគន្លឹះរបស់ C |
x | ត្រឹមត្រូវ ប៉ុន្តែមិនសូវល្អ | ខ្វះអត្ថន័យ លើកលែងតែប្រើក្នុងបរិបទខ្លី |
គួរប្រើឈ្មោះដែលបង្ហាញអត្ថន័យ ដូចជា៖
student_score unit_price total_amount is_logged_in
ត្រូវជ្រើសរើសរចនាប័ទ្មដាក់ឈ្មោះមួយ និងប្រើឱ្យស្របគ្នាក្នុងគម្រោងទាំងមូល។
int score;
Compiler ដឹងថា score ជាអញ្ញតិសម្រាប់ផ្ទុកចំនួនគត់។ ប៉ុន្តែវាមិនទាន់មានតម្លៃដែលអាចយកទៅប្រើដោយសុវត្ថិភាពទេ។
score = 80;
ឬប្រកាស និងកំណត់តម្លៃដំបូងក្នុងពេលតែមួយ៖
int score = 80;
printf("Score: %d\n", score);
%d ជានិមិត្តសញ្ញាកំណត់ទម្រង់សម្រាប់បង្ហាញតម្លៃប្រភេទ int។ នៅពេលកម្មវិធីដំណើរការ តម្លៃរបស់ score នឹងត្រូវដាក់ជំនួស %d។
score = 95;
តម្លៃ 80 ត្រូវបានជំនួសដោយ 95។ អញ្ញតិមួយរក្សាទុកតម្លៃបច្ចុប្បន្នមួយនៅពេលណាមួយ។
កម្មវិធីខាងក្រោមទទួលអាយុពីអ្នកប្រើ និងបង្ហាញតម្លៃត្រឡប់មកវិញ៖
#include <stdio.h> int main(void) { int age = 0; printf("Enter your age: "); if (scanf("%d", &age) != 1) { printf("Invalid input.\n"); return 1; } printf("Your age is %d years.\n", age); return 0; }
ចំណុចដែលត្រូវយល់៖
scanf("%d", &age) អានចំនួនគត់ពីក្តារចុច។&age ផ្ដល់អាសយដ្ឋានអង្គចងចាំរបស់ age ដើម្បីឱ្យ scanf() អាចសរសេរតម្លៃចូលបាន។scanf() ត្រូវបានពិនិត្យ ដើម្បីបញ្ជាក់ថាការបញ្ចូលជោគជ័យ។return 1; បង្ហាញថាកម្មវិធីបញ្ចប់ដោយមានបញ្ហា។return 0; បង្ហាញថាកម្មវិធីបញ្ចប់ដោយជោគជ័យ។សន្មតថាមាន៖
int count = 10;
យើងអាចកែតម្លៃរបស់ count បានច្រើនរបៀប៖
count = 20; // ផ្ដល់តម្លៃថ្មី count = count + 5; count += 5; // មានន័យដូច count = count + 5 count -= 2; count *= 3; count /= 2; count++; // បន្ថែម 1 count--; // ដក 1
កូដខាងក្រោម៖
count = count + 5;
មានដំណើរការដូចតទៅ៖
count។5។count។នេះជាមូលហេតុដែល = ក្នុងភាសា C ជាប្រមាណវិធីផ្ដល់តម្លៃ មិនមែនជាសមីការគណិតវិទ្យា។
ភាសា C អនុញ្ញាតឱ្យប្រកាសអញ្ញតិច្រើនដែលមានប្រភេទដូចគ្នាក្នុងបន្ទាត់តែមួយ៖
int width, height, area;
ទោះជាយ៉ាងណា ការប្រកាសមួយអញ្ញតិក្នុងមួយបន្ទាត់ជាញឹកញាប់មានភាពច្បាស់ និងងាយថែទាំជាង៖
int width = 0; int height = 0; int area = 0;
សូមពិនិត្យករណី Pointer ខាងក្រោម៖
int *first, second;
មានតែ first ប៉ុណ្ណោះដែលជា Pointer ខណៈ second ជា int ធម្មតា។ ដើម្បីជៀសវាងការយល់ច្រឡំ គួរប្រកាសដាច់ដោយឡែក៖
int *first; int second;
អញ្ញតិធម្មតាអាចផ្លាស់ប្ដូរតម្លៃបាន៖
double price = 10.0; price = 12.5;
បើតម្លៃមិនគួរត្រូវបានផ្លាស់ប្ដូរ ត្រូវប្រើ const៖
const double TAX_RATE = 0.10;
ក្រោយប្រកាសរួច កូដខាងក្រោមមិនត្រឹមត្រូវទេ៖
TAX_RATE = 0.15; // Error: មិនអាចកែតម្លៃ const
តាមរចនាប័ទ្មសរសេរកូដ គេនិយមដាក់ឈ្មោះថេរជាអក្សរធំ និងបំបែកដោយ _៖
MAX_STUDENTS TAX_RATE PASS_SCORE
អញ្ញតិដែលប្រកាសនៅក្នុងអនុគមន៍ ឬ Block { } អាចប្រើបានតែក្នុងតំបន់នោះ។
#include <stdio.h> int main(void) { int score = 80; if (score >= 50) { char grade = 'P'; printf("Grade: %c\n", grade); } // grade មិនអាចប្រើនៅទីនេះបានទេ return 0; }
អញ្ញតិ grade មានវិសាលភាពតែនៅក្នុង Block របស់ if ប៉ុណ្ណោះ។
អញ្ញតិដែលប្រកាសនៅក្រៅអនុគមន៍អាចត្រូវបានយោងដោយអនុគមន៍ជាច្រើនក្នុងឯកសារ។
int total_students = 0;
អញ្ញតិសកលមានប្រយោជន៍ក្នុងករណីចាំបាច់ ប៉ុន្តែការប្រើច្រើនពេកអាចធ្វើឱ្យកម្មវិធី៖
ដូច្នេះ គួរផ្ដល់អាទិភាពដល់អញ្ញតិមូលដ្ឋាន និងបញ្ជូនទិន្នន័យតាម Parameter។
អញ្ញតិមូលដ្ឋានដែលមាន static រក្សាតម្លៃរបស់វារវាងការហៅអនុគមន៍ម្ដងៗ។
#include <stdio.h> void show_call_count(void) { static int count = 0; count++; printf("Called %d time(s)\n", count); } int main(void) { show_call_count(); show_call_count(); show_call_count(); return 0; }
លទ្ធផល៖
Called 1 time(s) Called 2 time(s) Called 3 time(s)
count មានវិសាលភាពនៅក្នុងអនុគមន៍ show_call_count() ប៉ុន្តែមានអាយុកាលរហូតដល់កម្មវិធីបញ្ចប់។
ពិនិត្យកូដខាងក្រោម៖
int total = 5; int students = 2; double average = total / students;
លទ្ធផលរបស់ average គឺ 2.0 មិនមែន 2.5 ទេ ព្រោះ total / students ជាការចែករវាង int និង int។ ផ្នែកទសភាគត្រូវបានបោះចោលមុនពេលលទ្ធផលត្រូវបានបម្លែងទៅជា double។
កែតម្រូវដោយបម្លែង Operand យ៉ាងហោចណាស់មួយទៅជា double៖
double average = (double) total / students;
ឥឡូវលទ្ធផលគឺ 2.5។ នេះបង្ហាញថា ការជ្រើសរើសប្រភេទអញ្ញតិមានឥទ្ធិពលដោយផ្ទាល់លើការគណនា។
#include <stdio.h> int main(void) { const double PASS_SCORE = 50.0; int student_id = 0; double quiz = 0.0; double midterm = 0.0; double final_exam = 0.0; double total = 0.0; printf("Enter student ID: "); if (scanf("%d", &student_id) != 1) { printf("Invalid student ID.\n"); return 1; } printf("Enter quiz score (20): "); if (scanf("%lf", &quiz) != 1) { printf("Invalid quiz score.\n"); return 1; } printf("Enter midterm score (30): "); if (scanf("%lf", &midterm) != 1) { printf("Invalid midterm score.\n"); return 1; } printf("Enter final exam score (50): "); if (scanf("%lf", &final_exam) != 1) { printf("Invalid final exam score.\n"); return 1; } if (quiz < 0.0 || quiz > 20.0 || midterm < 0.0 || midterm > 30.0 || final_exam < 0.0 || final_exam > 50.0) { printf("Score is outside the allowed range.\n"); return 1; } total = quiz + midterm + final_exam; printf("\n--- Student Result ---\n"); printf("Student ID : %d\n", student_id); printf("Total : %.2f / 100.00\n", total); printf("Result : %s\n", total >= PASS_SCORE ? "PASS" : "FAIL"); return 0; }
PASS_SCORE ជាថេរ ព្រោះពិន្ទុជាប់មិនគួរផ្លាស់ប្ដូរក្នុងពេលដំណើរការ។student_id ប្រើ int ព្រោះគំរូនេះទទួលលេខសម្គាល់ជាចំនួនគត់។double ដើម្បីអនុញ្ញាតតម្លៃទសភាគ។total ត្រូវបានកំណត់តម្លៃដំបូង និងផ្លាស់ប្ដូរក្រោយទទួលពិន្ទុ។%.2f បង្ហាញចំនួនទសភាគពីរខ្ទង់។?: ត្រូវបានប្រើសម្រាប់ជ្រើសរើស "PASS" ឬ "FAIL"។មិនត្រឹមត្រូវ៖
int score; printf("%d\n", score);
កែតម្រូវ៖
int score = 0; printf("%d\n", score);
& ក្នុង scanf()មិនត្រឹមត្រូវ៖
int age = 0; scanf("%d", age);
កែតម្រូវ៖
int age = 0; scanf("%d", &age);
មិនត្រឹមត្រូវ៖
double price = 12.5; printf("%d\n", price);
កែតម្រូវ៖
double price = 12.5; printf("%.2f\n", price);
= ជំនួស == ក្នុងលក្ខខណ្ឌមិនត្រឹមត្រូវ៖
if (score = 100) { /* ... */ }
កូដនេះផ្ដល់តម្លៃ 100 ទៅឱ្យ score មិនមែនប្រៀបធៀបទេ។
កែតម្រូវ៖
if (score == 100) { /* ... */ }
double result = 5 / 2;
លទ្ធផលគឺ 2.0 ព្រោះ 5 និង 2 ជា int។
កែតម្រូវ៖
double result = 5.0 / 2.0;
ឬ៖
double result = (double) 5 / 2;
ប្រភេទទិន្នន័យនីមួយៗមានដែនតម្លៃកំណត់។ អាចប្រើ <limits.h> និង <float.h> ដើម្បីពិនិត្យដែនតម្លៃតាមប្រព័ន្ធ។
#include <limits.h> #include <stdio.h> int main(void) { printf("INT_MIN = %d\n", INT_MIN); printf("INT_MAX = %d\n", INT_MAX); return 0; }
បើប្រើ GCC និងរក្សាទុកកូដជា variables.c៖
gcc -std=c17 -Wall -Wextra -Wpedantic variables.c -o variables
ដំណើរការលើ Windows៖
variables.exe
ដំណើរការលើ macOS ឬ Linux៖
./variables
ជម្រើស Compile ខាងក្រោមមានសារៈសំខាន់៖
-Wall បើក Warning សំខាន់ៗជាច្រើន។-Wextra បើក Warning បន្ថែម។-Wpedantic ពិនិត្យការអនុលោមតាមស្តង់ដារ C ឱ្យតឹងរ៉ឹងជាងមុន។អ្នកសិក្សាគួរអាន Warning និងកែឱ្យអស់ មិនគួរមើលរំលងឡើយ។
គ្រូសរសេរកូដខាងក្រោមលើក្ដារ៖
int quantity = 5;
អ្នកសិក្សាគូរប្រអប់មួយ មានស្លាក quantity និងដាក់តម្លៃ 5 នៅខាងក្នុង។
បន្ទាប់មក គ្រូបង្ហាញ៖
quantity += 3;
អ្នកសិក្សាគណនា និងផ្លាស់ប្ដូរតម្លៃក្នុងប្រអប់ពី 5 ទៅជា 8។
មុន Compile និង Run សូមឱ្យអ្នកសិក្សាព្យាករណ៍លទ្ធផលរបស់កូដ៖
int value = 10; value += 5; value *= 2; value--; printf("%d\n", value);
លទ្ធផល៖
29
ដំណើរការ៖
value = 10value += 5 → 15value *= 2 → 30value-- → 29double average = 5 / 2; មិនទទួលបាន 2.5?age, height, grade និង is_registered ដោយជ្រើសរើសប្រភេទសមស្រប។printf() និង Format Specifier ត្រឹមត្រូវ។ត្រូវប្រុងប្រយ័ត្នបញ្ហា Integer Division។
const double TAX_RATE = 0.10;
បង្ហាញសរុបមុនពន្ធ ចំនួនពន្ធ និងសរុបក្រោយពន្ធ។
កែតម្រូវកូដខាងក្រោម និងពន្យល់កំហុសនីមួយៗ៖
#include <stdio.h> int main(void) { int 2scores; float average; printf("Enter average: "); scanf("%d", average); if (average = 50) { printf("Pass\n"); } return 0; }
ចំណុចដែលត្រូវសម្គាល់៖
2scores ចាប់ផ្ដើមដោយលេខ។average មិនបានកំណត់តម្លៃដំបូង។%d មិនត្រូវនឹង float។scanf() ខ្វះ &average។= ត្រូវបានប្រើជំនួស ==។លំហាត់បន្ថែម៖
a និង b ដោយប្រើអញ្ញតិបណ្ដោះអាសន្ន temp។sizeof និងតម្លៃពី <limits.h> លើកុំព្យូទ័ររបស់អ្នក រួចរៀបចំជាតារាងលទ្ធផល។int score; ខុសពី int score = 0; ដូចម្ដេច?= និង == មានតួនាទីខុសគ្នាដូចម្ដេច?scanf() ត្រូវការ & នៅមុខអញ្ញតិចំនួនគត់?float និង double ខុសគ្នាដូចម្ដេច?const?5 / 2 ក្នុង C ជាអ្វី? ហេតុអ្វី?0។= ប្រើសម្រាប់ផ្ដល់តម្លៃ ខណៈ == ប្រើសម្រាប់ប្រៀបធៀបភាពស្មើគ្នា។scanf() ត្រូវសរសេរតម្លៃចូល។double មានភាពជាក់លាក់ និងដែនតម្លៃធំជាង float។const នៅពេលតម្លៃមិនគួរផ្លាស់ប្ដូរក្រោយការកំណត់ដំបូង។2 ព្រោះ Operand ទាំងពីរជា int ហើយផ្នែកទសភាគត្រូវបានបោះចោល។អញ្ញតិជាគ្រឹះសំខាន់នៃការសរសេរកម្មវិធីភាសា C ព្រោះវាអនុញ្ញាតឱ្យកម្មវិធីរក្សាទុក អាន គណនា និងផ្លាស់ប្ដូរទិន្នន័យ។ ការប្រើអញ្ញតិឱ្យបានត្រឹមត្រូវ ត្រូវយល់ពីប្រភេទទិន្នន័យ ការប្រកាស ការកំណត់តម្លៃដំបូង ការផ្ដល់តម្លៃថ្មី វិសាលភាព និងអាយុកាល។
អ្នកសរសេរកម្មវិធីគួរ៖
ក្នុងមេរៀនទី២ យើងនឹងសិក្សាលម្អិតអំពី ប្រភេទទិន្នន័យ (Data Types) ដែនតម្លៃ Type Modifiers និង Type Conversion ក្នុងភាសា C។ ចំណេះដឹងនេះនឹងជួយឱ្យអ្នកសិក្សាអាចជ្រើសរើសប្រភេទទិន្នន័យបានត្រឹមត្រូវ ប្រើអង្គចងចាំមានប្រសិទ្ធភាព និងជៀសវាង Overflow ឬការបាត់បង់ភាពជាក់លាក់។
មិនទាន់មានមតិយោបល់ — ក្លាយជាអ្នកដំបូង!