[Procedural Programming + Ada] Bài 2 – Một Ngôn Ngữ Imperative

Ada là một ngôn ngữ hỗ trợ triển khai logic của nhiều mô hình lập trình khác nhau, trong đó có cả Lập Trình Hướng Đối Đượng OOP và một số yếu tố của Lập Trình Hàm FP. Tuy nhiên thì thiết kế cốt lõi của Ada lại là một ngôn ngữ trọng tâm Lập

Ada là một ngôn ngữ hỗ trợ triển khai logic của nhiều mô hình lập trình khác nhau, trong đó có cả Lập Trình Hướng Đối Đượng OOP và một số yếu tố của Lập Trình Hàm FP. Tuy nhiên thì thiết kế cốt lõi của Ada lại là một ngôn ngữ trọng tâm Lập Trình Tuần Tự Imperative giống với C hoặc Pascal.

Có một điểm khác biệt quan trọng giữa Ada và phần lớn các ngôn ngữ lập trình khác, đó là các câu lệnh và các biểu thức được phân biệt rất rõ ràng trong Ada. Nếu như chúng ta cố gắng sử dụng một biểu thức ở vị trí mà đáng lẽ cần xuất hiện một câu lệnh thì chắc chắn sẽ nhận được thông báo lỗi khi tiến hành biên dịch code.

Nguyên tắc này bổ trợ cho một trong số những tiêu chí thiết kế ngôn ngữ đã kể trước đó: Đó là các biểu thức thì được sử dụng để truyền tải các giá trị, chứ không tạo ra bất kỳ hiệu ứng biên nào khác. Điều này sẽ giúp sàng lọc được một số lỗi lập trình trong một số tình huống, ví dụ như khi chúng ta sử dụng nhầm phép so sánh tương đương ở vị trí mà đáng ra phải là một câu lệnh gán giá trị cho một biến nào đó.

const fromMySoul =truevar shouldDoIt =falseif(shoudDoIt = fromMySoul)
   console.log("Ok. We'll do it.")else
   console.log("Nah. We're not gonna do it.")

Đó là một ví dụ logic rẽ nhánh trong JavaScript, khi mà chúng ta dự định rằng: Nếu dự tính shoulDoIt cũng đồng thuận với tiềm thức fromMySoul thì sẽ thực hiện một dự định. Trong trường hợp này khi chúng ta biểu thị nhầm bằng phép gán giá trị như trên thì hiển nhiên kết quả sẽ luôn luôn là "Ok. We'll do it.". Và đó là điều mà Ada sẽ không để xảy ra.

Hello, Ada !

Trước khi nói đến việc cài đặt và chuẩn bị môi trường cho Ada thì chúng ta sẽ nhìn lướt qua chương trình Hello World giống như khi bắt đầu học bất kỳ ngôn ngữ lập trình nào khác.

with Ada.Text_IO;

procedure Greet is
   -- khu vực khai báo các biến
begin
   -- in "Hello, Ada !" ra cửa sổ dòng lệnh
   Ada.Text_IO.Put_Line ("Hello, Ada !");
end Greet;

Có một vài điểm đáng lưu ý trong chương trình này:

  • Một chương trình con sub-program trong Ada có thể là một Thủ Tục procedure hoặc một Hàm function. Và một Thủ Tục procedure như trong code ví dụ ở trên sẽ không bao giờ trả về một giá trị nào tại vị trí được gọi.
  • Từ khóa with được sử dụng để tham chiếu tới các module bên ngoài. Yếu tố này tương đương với import trong nhiều ngôn ngữ khác, và #include trong C hay C++. Chúng ta sẽ tìm hiểu chi tiết về hoạt động của with ở phần sau.
  • Khác với các ngôn ngữ như C hay C++, chương trình chính trong Ada có thể được đặt tên tùy ý, như trong ví dụ trên là Greet, thay vì Main.
  • Các nội dung chú thích comment được mở đầu với ký hiệu -- và kéo dài đến hết dòng đó. Chúng ta sẽ không có cú pháp chú thích nhiều dòng multi-line comment và nếu cần thiết thì sẽ phải tạo ra nhiều dòng chú thích đơn.

Về mặt ý nghĩa biểu thị thì các Thủ Tục procedure tương đương với các sub-program trong các ngôn ngữ khác nếu trả về các giá trị vô nghĩa. Ví dụ như void trong CC++, hay undefined trong JavaScript, v.v… Chúng ta sẽ điểm qua thao tác định nghĩa Hàm function trong Ada ở phần sau. Còn bây giờ thì chúng ta sẽ chỉnh sửa lại chương trình Hello World một chút.

with Ada.Text_IO; use Ada.Text_IO;

procedure Greet is
   -- khu vực khai báo các biến
begin
   -- in "Hello, Ada !" ra cửa sổ dòng lệnh
   Put_Line ("Hello, Ada !");
end Greet;

Lần này chúng ta sử dụng thêm tính năng use đi kèm với with. Cú pháp sử dụng là use package-name. Và ở vị trí gọi thủ tục Put_Line, chúng ta đã có thể lược giản tên tham chiếu tới package ở phía trước.

Cài Đặt Môi Trường

Mặc dù được sử dụng chủ yếu trong các lĩnh vực khoa học công nghệ cao và các ứng dụng mang tính chất enterprise, bộ công cụ hỗ trợ phát triển ứng dụng của Ada có cung cấp phiên bản cộng đồng community edition miễn phí với trình biên dịch đầy đủ tính năng tương đương với phiên bản thương mại pro edition cho các doanh nghiệp.

Bạn có thể tải về GNAT Community cho Windows tại đây:

  • GNAT Community – bộ công cụ tích hợp kèm trình soạn thảo code IDE dành riêng cho AdaC
  • GTA-Ada – plug-in hỗ trợ tạo project với thư viện GUI của Gnome.org cho nhu cầu phát triển ứng dụng đa nền tảng. Viết code 1 lần duy nhất và biên dịch ra các package cho Windows, Linux, BSD, Mac, v.v…

Nếu bạn đang sử dụng một phiên bản Linux nào đó thì có thể tìm trong thư viện repository mặc định gói gnat-12 (phiên bản mới nhất là Ada 2012) và công cụ quản lý dự án gprbuild (GNAT Project Build). Trong đó thì gnat-12 là phần lõi của môi trường phát triển và chúng ta sẽ học cách sử dụng ngay gprbuild để thiết lập project và quản lý các thư mục code.

Hiện tại mình đang sử dụng Ubuntu 22.10 và vì vậy nên có thể đảm bảo lệnh cài đặt dưới đây sẽ hoạt động tốt. Các bản phân phối Linux tiêu biểu khác như Fedora và OpenSUSE cũng đều có liệt kê các package trên trong các trang tra cứu thư viện.

sudo apt update && sudo apt upgrade
sudo apt install gnat-12 gprbuild

Nói riêng về thao tác sử dụng thì trong loạt bài viết hướng dẫn ở đây, mình sẽ sử dụng gprbuild bằng cửa sổ dòng lệnh và chỉnh sửa tệp khai báo project thủ công. Bạn cũng có thể để dành cái trình soạn thảo tích hợp IDE cho đến khi muốn tạo ra một project ứng dụng thực tế. Và vì vậy nên ở đây mình cần lưu ý một chút về thao tác cài đặt trên Windows.

Tất cả các thao tác với bộ cài đều là Next, Next, và Next với các tùy chọn đã được thiết lập mặc định. Tuy nhiên thì bộ cài của GNAT Community cho Windows sẽ không tự động khai báo biến môi trường cho các thao tác trên cửa sổ dòng lệnh CMD. Do đó nên sau khi chạy bộ cài xong thì chúng ta sẽ cần phải mở thư mục cài đặt của GNAT và tìm tới thư mục bin. Sau đó copy/paste đường dẫn đầy đủ của thư mục C:GNAT2021bin vào biến môi trường Path.

Environment Variables > System Variables > Path > Edit > New

Hoặc mở cửa sổ dòng lệnh CMD với quyền Admin:

setx path "%PATH%;C:GNAT2021bin"

Sau đó trong cửa sổ dòng lệnh, chúng ta có thể gõ lệnh kiểm tra phiên bản GNAT đã được cài đặt:

gnat --version
gprbuild --version

Ok.. mọi thứ đều đã sẵn sàng, chúng ta hãy bắt đầu tìm hiểu chi tiết về ngôn ngữ Ada và công cụ quản lý gprbuild.

(chưa đăng tải) [Procedural Programming + Ada] Bài 3 – Các Cú Pháp Imperative

Nguồn: viblo.asia

Bài viết liên quan

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,