Nội dung bài viết
Đăng ký học lập trình C++
Tại STDIO bạn được dạy nền tảng lập trình tốt nhất.
Đăng ký học
Trong quá trình lập trình, việc ghi nhớ và hiểu mã nguồn nhanh là cần thiết. Trong bài viết này, tôi giới thiệu đến các bạn hai kỹ thuật giúp hỗ trợ việc ghi nhớ và dễ hiểu mã nguồn, là typedef và enum.

Giới thiệu

Trong quá trình lập trình, việc ghi nhớ và hiểu mã nguồn nhanh là cần thiết. Trong bài viết này, xin được giới thiệu đến các bạn hai kỹ thuật giúp hỗ trợ việc ghi nhớ và dễ hiểu mã nguồn, là typedef và enum.

Tiền đề bài viết

Bài viết này nằm trong chương trình C++ của STDIO.

Đối tượng hướng đến

Bài viết hướng đến các developer đang tìm hiểu về ngôn ngữ C++. Bài viết yêu cầu bạn phải có kiến thức cơ bản về C++.

Môi trường thực thi

Codes dùng để ví dụ cho bài viết này được viết và thực thi tốt trong môi trường Visual Studio 2013 Ultimate.

Từ khóa typedef

Vấn đề

Trong một vài trường hợp, bạn cần tạo thêm tên cho một kiểu dữ liệu. Vì một vài lý do như kiểu dữ liệu có tên quá dài và bạn cần tạo thêm một cái tên ngắn gọn hơn, hoặc tên của kiểu dữ liệu hiện tại tối nghĩa so với ý nghĩa mà bạn mong muốn.

Chức năng

Từ khóa typedef giúp tạo thêm một tên (định danh) cho kiểu dữ liệu. Ngoài ra, từ khóa typedef còn dùng để định nghĩa tên cho một hàm. Tuy nhiên, trong phạm vi bài viết này chỉ tập trung vào việc sử dụng typedef cho kiểu dữ liệu.

Cú pháp khai báo

typedef <tên kiểu> <tên mới>;

Các ví dụ

typedef short smallNumber;

int main()
{
	smallNumber var_s = 10;

	var_s = var_s + 10;
	var_s++;

	return 0;
}
  • typedef là từ khóa.
  • short là tên của kiểu dữ liệu.
  • smallNumber là tên mới muốn đặt cho kiểu dữ liệu.

Sau đó ta có thể thao tác với biến kiểu smallNumber như là kiểu short thông thường.

typedef int point2D[2];

int main()
{
	point2D position;
	position[0] 	= 0;
	position[1] 	= 1;

	return 0;
}

Thay vì sử dụng mảng tĩnh 2 phân tử để khai báo một điểm như sau: int position[2], thì ta có thể sử dụng typedef để làm cho tên kiểu dữ liệu dễ hiểu hơn: point2D position.

Phạm vi khai báo

  • Khai báo typedef ở trong hàm thì phạm vi sử dụng ở trong hàm đó.
  • Khai báo typedef ở ngoài hàm (trong file .cpp) thì phạm vi sử dụng trong file cpp đó.
  • Bạn có thể tìm hiểu việc khai báo trong file header. Trong phạm vi bài viết xin không đi sâu về vấn đề này.

Kiểu enum

Vấn đề

Trong lập trình, đôi khi những kiểu dữ liệu không mang lại ý nghĩa phù hợp với mục đích người lập trình, hoặc tệ hơn có thể làm trở ngại quá trình lập trình. Lấy ví dụ khi ta lưu trữ các ngày trong tuần bằng một biến integer. Ta buộc phải nhớ chính xác bảy giá trị tương tứng với 7 ngày trong tuần. Điều này gây khó khăn cho việc ghi nhớ và phát triển lâu dài. Chúng ta cần một kiểu dữ liệu mới mang lại ý nghĩa rõ ràng hơn.

Chức năng

Làm cho đoạn mã nguồn trở nên sáng sủa và dễ hiểu.

Cú pháp khai báo

enum <tên enum>
{
<tên hằng 1>,
<tên hằng 2>,
...
}
  • Sau từ khóa enum là tên kiểu liệt kê.
  • Bên trong là các hằng số, mỗi một hằng số được cách nhau bằng dấu ','. Riêng hằng số cuối cùng không có dấu ','.
  • Tên hằng không được có khoảng trắng.
  • Kết thúc enum phải có dấu ';'.
  • Có thể tạo giá trị cho hằng số. Nếu hằng số đầu tiên không được gán giá trị, thì giá trị mặc định là 0.

Các ví dụ

Cách khai báo một enum

enum eDayOfWeek
{
	MONDAY,
	TUESDAY,
	WEDNESDAY,
	THURSDAY,
	FRIDAY,
	SATURDAY,
	SUNDAY
};

Sử dụng enum để in ra thứ ngày trong tuần

#include <iostream>
using namespace std;

enum eDayOfWeek
{
	MONDAY,
	TUESDAY,
	WEDNESDAY,
	THURSDAY,
	FRIDAY,
	SATURDAY,
	SUNDAY
};

void PrintScreen(eDayOfWeek day)
{
	switch (day)
	{
	case eDayOfWeek::MONDAY :
		cout << "Now day is a Monday"	<< endl;
		break;
	case eDayOfWeek::TUESDAY:
		cout << "Now day is a Tuesday"	<< endl;
		break;
	case eDayOfWeek::WEDNESDAY:
		cout << "Now day is a Wednesday"<< endl;
		break;
	case eDayOfWeek::THURSDAY:
		cout << "Now day is a Thursday" << endl;
		break;
	case eDayOfWeek::FRIDAY:
		cout << "Now day is a Friday"	<< endl;
		break;
	case eDayOfWeek::SATURDAY:
		cout << "Now day is a Saturday"	<< endl;
		break;
	case eDayOfWeek::SUNDAY:
		cout << "Now day is a Sunday"	<< endl;
		break;
	default:
		break;
	}
}

int main()
{
	eDayOfWeek nowDay = eDayOfWeek::MONDAY;

	PrintScreen(nowDay);

	return 0;
}

Thay vì sử dụng biến integer để lưu trữ giá trị, việc sử dụng một enum giúp chúng ta dễ dàng hiểu ý nghĩa của đoạn mã hơn. Thuận lợi cho quá trình phát triển.

Phạm vi khai báo

  • Khai báo kiểu liệt kê bên trong hàm thì có thể sử dụng kiểu liệt kê đó bên trong hàm.
  • Khai báo kiểu liệt kê bên trong một file cpp và ngoài hàm, thì kiểu liệt kê đó có thể được sử dụng trong toàn file cpp.
  • Bạn có thể tìm hiểu việc khai báo trong file header. Trong phạm vi bài viết xin không đi sâu về vấn đề này.
THẢO LUẬN