1. Hằng là gì? Biến là gì?

Trong lập trình hằng hay hằng số ( constant ) dùng để lưu trữ dữ liệu, dữ liệu của hằng luôn luôn cố định và không thay đổi trong suốt chương trình.

Biến hay biến số ( varialbe ) dùng để lưu trữ dữ liệu nhưng dữ liệu được lưu trữ trong biến có thể thay đổi khi chạy chương trình.

 

2. Ví dụ về hằng và biến

2.1. Ví dụ về hằng

Trong ví dụ sau đây ta định nghĩa một hằng có tên là SITE _ DOMAIN:

Trong tin học, hằng là đại lượng? Biến là đại lượng?

Trong trường hợp này bạn có thể sử dụng nhưng không thể thay đổi giá trị của TEMP _ FOLDER.

Lưu ý: trong hầu hết các ngôn ngữ lập trình thì tên hằng được để in hoa tuy nhiên điều này là không bắt buộc và bạn có thể sử dụng chữ in thường.

Ngoài ra sử dụng cú pháp ở trên thì trong C để khai báo một hằng số bạn có thể sử dụng macro như sau:

Trong tin học, hằng là đại lượng? Biến là đại lượng?

 

2.2. Ví dụ về biến

Trong ví dụ sau đây chúng ta định nghĩa một biến có tên là year được định nghĩa với kiểu dữ liệu là int:

Trong tin học, hằng là đại lượng? Biến là đại lượng?

Trong trường hợp này giá trị của biến year có thể thay đổi trong quá trình chạy chương trình như bạn có thể thấy ở trên.

 

3. Kiểu dữ liệu của biến

Dữ liệu trong lập trình được phân chia thành các kiểu khác nhau ví dụ như kiểu số ( gồm các số nguyên ), kiểu chuỗi ( gồm chuỗi các ký tự ), kiểu float gồm các số thực... Một số ngôn ngữ lập trình như C thì chúng ta cần định nghĩa kiểu dữ liệu cho biến khi khai báo biến. Ví dụ biến year sau đây được khai báo với kiểu dữ liệu integer.

Việc khai báo kiểu dữ liệu của biến giúp trình biên dịch compiler của C biết được sẽ cần phải đăng ký bao nhiêu dung lượng của bộ nhớ RAM để lưu trữ giá trị của biến, Ví dụ với kiểu dữ liệu số sẽ cần tới 2 hoặc tối đa là 4 bytes dung lượng của RAM để lưu trữ.

Các ngôn ngữ yêu cầu định nghĩa kiểu dữ liệu của biến khi khai báo như trên còn được gọi là ngôn ngữ kiểu tĩnh hay static typing language.

Với một số ngôn ngữ lập trình khác như PHP hay Ruby thì lập trình viên không cần phải khai báo kiểu dữ liệu cho biến và trình biên soạn interpreter sẽ tự động thực hiện việc gán dữ liệu bộ nhớ cho biến dựa trên giá trị mà biến lưu trữ:

Trong tin học, hằng là đại lượng? Biến là đại lượng?

Các ngôn ngữ hỗ trợ tính năng cho phép không cần định nghĩa kiểu dữ liệu cho biến này còn được gọi là ngôn ngữ kiểu động hay dymaic typing language.

 

4. Ngôn ngữ kiểu động

Một ngôn ngữ lập trình được cho là được gõ động, hoặc chỉ là "động" khi phần lớn việc kiểm tra của nó được thực hiện vào thời gian trái ngược với thời gian biên dịch. Trong kiểu gõ động, các kiểu được liên kết với các giá trị không phải là biến. Các ngôn ngữ được nhập bao gồm Groovy, JavaScript, Lisp, Lua, Objective - C ( liên quan đến các loại do người sử dụng xác định nhưng không phải là các loại tích hợp ). So với gõ tĩnh, gõ động có thể linh hoạt hơn ví dụ bằng cách cho phép các chương trình tạo các loại và chức năng dựa trên dữ liệu thời gian chạy , mặc dù chi phí ít hơn một đảm bảo tiên nghiệm. Điều này là do một ngôn ngữ gõ động chấp nhận và cố gắng thực thi một số chương trình có thể bị quy định là không hợp lệ bởi chương trình kiểm tra kiểu tĩnh.

Gõ động có thể dẫn đến lỗi loại thời gian chạy, đó là trong thời gian chạy một giá trị có thể có loại không mong muốn và một thao tác vô nghĩa đối với loại đó được áp dụng. Hoạt động này có thể xảy ra rất lâu sau khi xảy ra lỗi lập trình, đó là nơi mà loại dữ liệu sai được truyền vào một nơi không nên có. Điều này làm cho lỗi khó xác định vị trí.

Các hệ thống ngôn ngữ được gõ động, so với các anh em họ gõ tĩnh của chúng, thực hiện kiểm tra "thời gian dịch" ít hơn trên mã nguồn ( ví dụ sẽ kiểm tra xem chương trình có đúng về mặt cú pháp không ). Kiểm tra thời gian thực có khả năng phức tạp hơn vì chúng có thể sử dụng thông tin động cũng như bất kỳ thông tin nào có trong quá trình dịch. Mặt khác, kiểm tra thời gian chạy chỉ xác định rằng các điều kiện giữ trong một thực thi cụ thể của chương trình và kiểm tra này được lặp lại cho mỗi lần thực hiện chương trình.

Phát triển trong các ngôn ngữ gõ động thường được hỗ trợ bởi các thực tiễn lập trình như kiểm tra đơn vị. Kiểm thử là một thông lệ quan trọng trong phát triển phần mềm chuyên nghiệp và đặc biệt quan trọng trong các ngôn ngữ được gõ động. Trong thực tế, kiểm tra được thực hiện để đảm bảo hoạt động chương trình chính xác có thể phát hiện phạm vi lỗi rộng hơn nhiều so với kiểm tra kiểu tĩnh, nhưng ngược lại không thể tìm kiếm toàn diện các lỗi mà cả kiểm tra loại tĩnh đều có thể phát hiện. Kiểm thử có thể được tích hợp vào chu trình xây dựng phần mềm, trong trường có thể được tích hợp vào chu trình xây dựng phần mềm, trong trường hợp đó có thể được coi là kiểm tra "thời gian biên dịch", trong đó người dùng chương trình sẽ không phải chạy thủ công các kiểm tra đó.

Ngược lại với kiểu gõ động là gõ tính. Kiểu gõ này được sử dụng khi kiểm tra được thực hiện trong thời gian biên dịch trái ngược với thời gian chạy. Trong kiểu gõ tĩnh, các kiểu được liên kết với các biến không phải là giá trị. Các ngôn ngữ được nhập tĩnh bao gồm Ada, C, C++, C#,Java,... ( liên quan đến việc phân biệt vô hướng, mảng, băm và chương trình con ) và Scala. Gõ tĩnh là một hình thức xác minh chương trình hạn chế ( xem loại an toàn ): theo đó nó cho phép nhiều lỗi loại được phát hiện sớm trong chu kỳ phát triển. Trình kiểm tra loại tĩnh chỉ đánh giá thông tin loại có thể được xác định tại thời điểm biên dịch, nhưng có thể xác minh rằng các điều kiện kiểm tra giữ cho tất cả các lần thực hiện có thể của chương trình, giúp loại bỏ sự cần thiết phải lặp lại kiểm tra loại mỗi khi chương trình được thực thi. Việc thực hiện chương trình cũng có thể được thực hiện hiệu quả hơn ( tức là nhanh hơn và giảm bộ nhớ ) bằng cách bỏ qua kiểm tra loại thời gian chạy và cho phép tối ưu hóa khác.

Bởi vì họ đánh giá thông tin loại trong quá trình biên dịch và do đó thiếu thông tin loại chỉ có sẵn tại thời gian chạy, nên trình kiểm tra loại tĩnh là bảo thủ. Họ từ chối một số chương trình có thể hoạt động tốt trong thời gian chạy nhưng điều đó không thể được xác định một cách tĩnh để được đánh máy tốt. Ví dụ: ngay khi một biểu thức luôn được đánh giá là đúng trong thời gian chạy, một chương trình có chứa mã

Trong tin học, hằng là đại lượng? Biến là đại lượng?

sẽ bị từ chối khi nhập sai, vì phân tĩnh chẵn không thể xác định rằng nhánh khác sẽ không được thực hiện. Hành vi bảo thủ của trình kiểm tra tĩnh là thuận lợi đánh giá sai không thương xuyên: trình kiểm tra loại tĩnh có thể phát hiện lỗi loại trong các đường dẫn mã hiếm khi được sử dụng. Nếu không kiểm tra kiểu tĩnh, ngay cả các kiểm tra phạm vi mã với độ bao phủ mã là 100 % có thể không thể tìm thấy các lỗi loại đó. Các kiểm tra phạm vi mã có thể không phát hiện ra các lỗi loại như vậy bởi sự kết hợp của tất cả các vị trí nơi các giá trị được tạo và tất cả các vị trí sử dụng một giá trị nhất định phải được tính đến.

Các ngôn ngữ gõ tĩnh được sử dụng rỗng rãi nhất không phải là loại chính thức an toàn. Chúng có "lỗ hổng" trong đặc tả ngôn ngữ lập trình cho phép các lập trình viên viết mã phá vỡ xác minh được thực hiện bởi trình kiểm tra kiểu tĩnh và do đó giải quyết một loạt các vấn đề. 

Trên đây là bài viết của Luật Minh Khuê về nội dung liên quan đến trong tin học hằng và biến có là đại lượng không ? Hy vong bài viết sẽ hữu ích đối với bạn đọc. Trân trọng cảm ơn !