- vừa được xem lúc

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

0 0 10

Người đăng: Semi Art

Theo Viblo Asia

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 = true
var shouldDoIt = false if (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:

  • Chúng ta đang có một ngôn ngữ sử dụng cú pháp dạng indentation style với các câu lệnh được xem là cùng khối nếu có cùng khoảng trống thụt vào ở đầu dòng, thay vì block style với các dấu ngoặc xoắn {} như C hay JavaScript.
  • 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:\GNAT\2021\bin 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:\GNAT\2021\bin"

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.

[Procedural Programming + Ada] Bài 3 - Các Cú Pháp Imperative

Bình luận

Bài viết tương tự

- vừa được xem lúc

Closure trong Javascript - Phần 2: Định nghĩa và cách dùng

Các bạn có thể đọc qua phần 1 ở đây. Để mọi người không quên, mình xin tóm tắt gọn lại khái niệm lexical environment:.

0 0 52

- vừa được xem lúc

Var vs let vs const? Các cách khai báo biến và hằng trong Javascript

Dạo này mình tập tành học Javascript, thấy có 2 cách khai báo biến khác nhau nên đã tìm tòi sự khác biệt. Nay xin đăng lên đây để mọi người đọc xong hy vọng phân biệt được giữa let và var, và sau đó là khai báo hằng bằng const.

0 0 32

- vừa được xem lúc

VueJS: Tính năng Mixins

Chào mọi người, hôm nay mình sẽ viết về Mixins và 1 số vấn đề trong sử dụng Mixins hay ho mà mình gặp trong dự án thực. Trích dẫn từ trang chủ của VueJS:.

0 0 28

- vừa được xem lúc

Asset Pipeline là cái chi chi?

Asset Pipeline. Asset pipeline là cái chi chi. . Giải thích:.

0 0 47

- vừa được xem lúc

Tạo data table web app lấy dữ liệu từ Google Sheets sử dụng Apps Script

Google Sheets là công cụ tuyệt vời để lưu trữ bảng tính trực tuyến, bạn có thể truy cập bảng tính bất kỳ lúc nào ở bất kỳ đâu và luôn sẵn sàng để chia sẻ với người khác. Bài này gồm 2 phần.

0 0 266

- vừa được xem lúc

Học Deep Learning trên Coursera miễn phí

Bạn muốn bắt đầu với Deep Learning nhưng không biết bắt đầu từ đâu? Bạn muốn có một công việc ở mức fresher về Deep Learning? Bạn muốn khoe bạn bè về kiến thức Deep Learning của mình. Bắt đầu từ đâu.

0 0 36