thuật ngữ IT cho Comtor. #2

tiếp theo bài trước

Trong bài chúng ta sẽ đến với một ít từ vựng dùng trong lĩnh vực lập trình (coding) tầng Nghiệp vụ (Business Logic Layer / 業務ロジックレイヤー)

Reference: https://www.w3schools.com/java/default.asp

Các minh họa trong bài sẽ sử dụng ngôn ngữ lập trình (programming languageプログラミング言語・コーディング言語) Java (ngày xưa tôi có chứng chỉ Java 2.0 🙂 )

Nhân nói về Java, cần phân biệt một tẹo với Javascript. Cả hai đều là ngôn ngữ lập trình, tuy nhiên Java có trước và phức tạp còn Javascript thì ra đời sau, dựa trên Java nhưng được đơn giản hoá đi và nhắm đến mục đích sử dụng khác. Cụ thể hơn thì Javascript được coi là một Client-side programming language, trong khi Java thì không thế.

Client-side Programming:

  • Nói đến phần code được thực thi trên trình duyệt của người dùng (client), như trong một trang web.
  • Client-side code chịu trách nhiệm về giao diện người dùng, tính tương tác và một số xử lý dữ liệu đơn giản: hiển thị nội dung, xử lý sự kiện trên trang web, validation (入力チェック) form….
  • Các ngôn ngữ phổ biến cho client-side là HTML, CSS và JavaScript.

Server-side Programming:

  • Nói đến phần code được chạy trên máy chủ (server), không phải trên trình duyệt của người dùng.
  • Server-side code chịu trách nhiệm xử lý logic nghiệp vụ, truy vấn cơ sở dữ liệu, bảo mật và các tác vụ phức tạp hơn: xác thực người dùng(authentication/authorization : 認証・認可), lưu trữ và truy xuất dữ liệu, tính toán phức tạp.
  • Các ngôn ngữ phổ biến cho server-side bao gồm PHP, Python, Java, C#, Ruby.

Có thể bạn không hiểu hết được các chi tiết trong đoạn trên nhưng đừng lo, chúng ta chỉ cần bắt keywords/ key differences về mặt ngôn từ là được.

I. Get your hands dirty

Nhân học các thuật ngữ liên quan đến lập trình, ta có thể thử kết hợp trải nghiệm luôn việc lập trình. Giờ đây thì việc thử “lập trình” ngày càng trở nên dễ dàng hơn, bài này xin giới thiệu một cách đơn giản để bắt đầu:

  1. Đăng ký vào https://www.sololearn.com/, một trang web miễn phí. Ta có thể đăng ký/ login bằng địa chỉ gmail đang sử dụng luôn được, hầu như không mất công gì cả:

2. Sau khi đăng ký/login xong, ta có thể scroll xuống dưới và chọn Add New trong phần Code Bits. Dưới đây là minh họa từ page Sololearn cá nhân tôi:

3. Chọn Java Compiler hoặc Python Compiler để bắt đầu. Cứ mạnh dạn chọn, yên tâm sẽ không có gì “nổ bùm” đâu 🙂

4. Tèn ten … Xuất hiện một màn hình màu đen xịn xò để lập trình và chạy (RunExecute実行) rồi xem kết quả (Execution result/ Execution output/ 実行結果) ngay và luôn!

II. Bắt đầu với comment, statement, datatype

OK, bắt tay vào code luôn cho nó nóng!

Thời đại instant gratification, muốn gì là có sẵn, cứ tương example vào chạy thử ngay và luôn:

Nhưng gượm, cái đoạn code trên có gì đó chưa ổn….Có gì đó sai sai….. Ý tôi không phải là code sai (w3c làm sao mà sai được chứ!), mà là …. chưa sướng! 🙂

Cái đoạn code trần trụi trên chẳng có tí dấu ấn gì của “tôi” cả. Nó vẫn sẽ chạy được và tôi vẫn sẽ tự hào về “trình độ code” “của bản thân”, nhưng tốt hơn là nó có dấu ấn cá nhân gì đó.

Và cách để cá nhân hoá một cách an toàn nhất, zero mistake là chèn vào một dòng comment (コメント) trong code

Nói văn vẻ thì comment trong code là để giao tiếp. Máy sẽ không đọc nó, nhưng những người liên quan đến đoạn code: người review code, người maintain (保守) code …. sẽ đọc nó. Và trong ví dụ này tôi sẽ thêm một dòng comment để giao tiếp với chính tôi hay ai đó đọc bài viết này.

VD. 1

OK, chạy ổn rồi, không có gì nổ bùm cả 😉

Một đơn vị cơ bản trong lập trình là statement (コーディング ステートメント). Trong đoạn code ở ảnh ngay trên, có 3 statement ở 3 dòng: dòng số 2, dòng số 3 và dòng số 4.

  • Khái niệm:
    • Statement là một đơn vị cơ bản trong ngôn ngữ lập trình, thể hiện một hành động cụ thể. Ví dụ trong Java:
      • int x = 5; (khai báo và gán giá trị biến)
      • System.out.println("Hello, world!"); (in ra một chuỗi)
      • if (x > 0) { ... } (câu lệnh điều kiện)

Trong đoạn ví dụ ở trên, ta thấy có khái niệm biến hay biến số (variable変数). Biến (variable) cũng là một khái niệm cơ bản. Một đoạn code (code snippetコードスニペット ) thì bao gồm một hay nhiều statement và trong statement thì hay xuất hiện các variable.

Lưu ý gọi là “biến số” nhưng nó không có nghĩa là một con số, nó chỉ là một thứ mà ta có thể gán (assign) cho nó bất kỳ giá trị (value / ) nào. Tuy nhiên, trước khi gán giá trị, ta nên khai báo (declare / 宣言Kiểu dữ liệu (data type / データ型 データタイプ) cho biến (variable).

Đi sâu vào các data type cụ thể, theo https://www.w3schools.com/java/java_data_types.asp , ta có một số ví dụ declare variable với các data type như sau:

VD. 2

tất cả các statement trên đều có cùng một dạng cú pháp (syntax 構文):

 {data type} space {variable} space  = {một value nào đó}

Trong ảnh VD. 2 có 5 data type:

Integer 整数 số nguyên,

Floating point number 浮動小数点数 Số thập phân dấu phẩy động,

Character 文字 Ký tự/chữ,

Boolean ブール型 (loại dữ liệu chỉ có 1 trong 2 giá trị là true hoặc false),

String 文字列 Chuỗi ký tự.

(Số thập phân có thể nói gọn là 小数点数 hoặc vắn tắt nữa là 小数, dấu phẩy thập phân (nói gọn là dấu thập phân) thì là 小数点 )

Như trên, các Data type có thể được nhóm thành 2 nhóm:

Nhóm các kiểu dữ liệu primitive (nguyên thuỷ プリミティブ型): gồm 整数, バイト (byte) , 文字, ブール型… Trong khi đó các kiểu 文字列, Array (配列), Classes (クラス) thì thuộc về nhóm non-primitive.

Kế thừa từ VD. 1 ở trên, thêm đoạn code sample ở VD. 2 vào rồi chế thêm mấy statement để print ra giá trị biến, tôi có đoạn code cùng kết quả chạy như dưới:

Trong phần chế biến trên, bạn có để ý dòng số 14 không? Dòng này vốn là statement cuối cùng của VD.1 nhưng nó không còn phù hợp để sử dụng với VD. 2, vì thế đáng nhẽ tôi có thể xoá bỏ nó hoàn toàn. Tuy nhiên, do “tiếc của”, chưa chắc chắn nên tôi đã làm một việc là biến statement đó thành một comment để vô hiệu hoá dòng code ấy mà không cần phải xoá nó.

Việc “vô hiệu hoá” một/ nhiều dòng code bằng cách biến chúng thành comment như vậy gọi là “comment out” (コメントアウト). Lợi ích của việc comment out là ta có thể nhanh chóng loại bỏ cũng như dễ dàng khôi phục một vài statement mình muốn.

Việc khôi phục một dòng code (thật sự chạy được) đã bị comment out trước đó bằng cách undo thao tác comment hoá gọi là bỏ comment (remove comment コメントを外す) VD.

// x = y + 1 ----> x = y + 1  //(loại bỏ “//” ở đầu dòng)

Nói thêm một chút về data type thì có hai nhóm kiểu dữ liệu thường dùng nhất là Kiểu sốNumeric (数字型・数値型) bao gồm Integer, Float, Double, Short…. , và Kiểu chuỗi/ Kiểu ký tự (文字列型) bao gồm Char, varchar, String…. Có một thuật ngữ trỏ đến kiểu dữ liệu chấp nhận pha trộn cả hai kiểu này gọi là Alphanumeric (英数字), ví dụ “John123” – tên người dùng bao gồm cả chữ và số.

III. Các toán tử

Nắm vững về variable (biến số) và value (giá trị) giúp ta hình dung rõ hơn về khái niệm Toán tử (Operator 演算子) trong lập trình: Operators are used to perform operations on variables and values.

Nói nôm na, operator là các phép toán dùng cho biến số và các giá trị, nhưng nó không chỉ dừng lại ở các phép tính toán cộng trừ nhân chia thông thường mà được mở rộng hơn.

Theo https://www.w3schools.com/java/java_operators.asp thì

. +, -, * (nhânmultiplication掛け算), / (chiadivision割り算), % (lấy phần dư) … là các toán tử toán học (Arithmetic operators 算術演算子), Vd. int sum = 10 + 20

. Phép gán giá trị cho biến (số) (assignment 代入する) cũng là một operator gọi là assignment operator (代入演算子). Và assignment operator cũng không chỉ có một loại “=” mà còn có nhiều loại khác. Vd. x += 5 (x = x + 5), x -=5 (x = x-5), x *= 5 (x = x*5).

. > , <, >=, <= , == là các toán tử so sánh (comparison operator 比較演算子)

Ta có thể thử kiểm nghiệm một vài operator đề cập ở trên bằng code. Cứ System.out.print ra thôi:

Có một lưu ý là cùng một operator có thể hoạt động khác nhau với các data type khác nhau. Đoạn code sau (sửa một tẹo từ đoạn trên) minh hoạ điều này (hãy tự chạy để check kết quả nhé):

Như được minh hoạ ở trên, cùng là phép cộng (addition 足し算) nhưng phép cộng số và phép cộng chuỗi là khác nhau.

IV. Hàm (số)

Trong lập trình, chúng ta có thể hết sức uyển chuyển/ linh hoạt trong việc điều khiển luồng chạy (execution flow 実行フロー). Ta có thể cho chạy một phần, chặn một phần hay toàn bộ các statement, ta cũng có thể tuỳ ý sửa đổi thứ tự chạy của các phần hoặc thêm, xoá … các phần chạy trong một execution flow.

Một đơn vị cơ bản giúp làm điều trên là các Hàm số, hay gọi tắt là hàm (function / 関数). Về cơ bản, ta có thể hình dung function là một tập hợp, hay một khối các dòng code (block of codeコードブロック)mà chỉ chạy (run) khi được gọi đến (call呼び出す).

Java gọi các hàm là method (メソッド), như vậy mọi method đều là function. Mỗi function đều thường được đặt một tên hàm (function name 関数名) để phục vụ cho việc call chúng.

Function là một code block độc lập được định nghĩa (define 定義) để thực hiện một nhiệm vụ cụ thể. Functions giúp tổ chức code (code arrangement /コード整理), tái sử dụng và làm cho chương trình dễ hiểu hơn.

Ta sẽ thử làm việc với function. Để làm thế, đầu tiên ta sẽ phải define một hàm đã. Tôi đã hỏi AI “cho một ví dụ function đơn giản nhất bằng Java” và có đoạn dưới.

Function ở trên có tên là sayHello (dòng số 5) và nó chỉ làm một việc rất đơn giản là print ra một chuỗi cố định: Hello, World!. (dòng số 7). Chỉ như thế thôi đã là một định nghĩa function hợp lệ và đầy đủ rồi. Tuy nhiên, nếu chúng ta chạy đoạn code trên thì chẳng có gì được print ra hết.

Vì sao? Đơn giản là vì ta mới chỉ làm mỗi việc định nghĩa function thôi, nhưng chừng nào function chưa được call (gọi) thì không có bất cứ statement nào bên trong function được thực thi hết. Muốn thực thi, ta phải gọi đến hàm, và dưới dây là cách gọi, cũng do AI cung cấp:

Lần này thì chạy ngon nghẻ rồi! Chúng ta thực hiện việc gọi hàm (関数を呼び出す) ở dòng số 11 và code block được viết từ dòng số 5 đến dòng số 7 đã được thực thi!

OK, giờ đây ta đã định nghĩa> gọi function được rồi. Tuy nhiên function hiện tại chưa thú vị lắm bởi vì nó không làm gì nhiều, chỉ print ra một dòng cố định mỗi khi được call.

Bây giờ thử làm nó thú vị hơn một chút.

Giả sử ta muốn mỗi lần gọi function này sẽ print ra “Hello {tên một ai đó} !”. Lúc coding ban đầu để define function thì ta chưa xác định cái tên để thay thế vào chỗ {tên một ai đó}, mà chỉ lúc nào call cái function ấy thì ta mới xác định. Tên sẽ được xác định lúc call, chứ không phải lúc define.

Về mặt kỹ thuật, điều trên được hiện thực bằng cách “truyền tham số” (pass params (thể ngắn gọn của “pass data, known as parameters“)/ 引数を渡すパラメータ引き渡し) lúc call function. Cụ thể ở đây, ta sẽ pass tên cụ thể lúc call function

Như minh họa ở trên, lúc define, ta thêm (String tenMotAiDo) như ở dòng 5, như vậy, function sẽ có khả năng nhận tham số đầu vào (input parameter /入力引数). Parameter này sẽ được sử dụng trong dòng số 6 để dòng được print ra sẽ có nội dung thay đổi theo value cụ thể của input parameter. Cuối cùng, khi gọi function, ta phải thêm giá trị thực tế như “Hải”, “Tùng” vào lệnh gọi hàm như ở dòng 11, 12.

Cuối cùng nhưng lại thường dùng, tôi sẽ giới thiệu function mà có trả về giá trị (return value値を復帰する値を返す).

Để đơn giản, tôi lại nhờ AI: “hãy viết một hàm tính tổng 2 số đơn giản bằng java”, từ đó có đoạn code sau:

Trong minh họa trên, function tên là sum được định nghĩa ở dòng số 5 nhận vào 2 input parameter là a và b, điều này ta đã biết ở phần trước khi nói về tham số đầu vào. Điểm mới ở dòng số 5 này nằm ở ngay trước tên sum: int –> nó có nghĩa là hàm tên sum này sẽ trả về (return復帰返す) một value có data type là int mỗi khi nó được gọi. Value này được trả về ở dòng 6 với từ khoá “return”, cụ thể hơn, dòng code này trả về một giá trị = a + b tức là tổng của hai tham số đầu vào.

Đó là phần định nghĩa của function sum. Còn chỗ call function này là dòng 12, ở đây biến result được gán cho giá trị bằng giá trị trả về (returned value / 復帰値) sau khi gọi hàm sum với 2 tham số (params引数) là num1 = 5 và num2 = 10.

Đoạn code trên chạy hoàn toàn ổn, chỉ có điều sẽ không có gì được print ra cả. (bạn thử tự suy nghĩ vì sao nhé :)). Nói cách khác, đoạn code như trên chẳng có tương tác nào với User cả.

Nhân tiện, những chương trình mà hầu như không có hoặc có rất ít tương tác với User, không hề có màn hình GUI (画面) nào hết, không có icon nào để bấm hết, User chỉ có một giao diện để gõ lệnh (cửa sổ console/ terminal/ ターミナル/ コマンドを叩くコンソール) như vậy gọi là batch program (バッチプログラム), gọi như vậy để phân biệt với loại program khác như Ứng dụng Web (ウェブアプリ) … chẳng hạn.

Hẹn gặp lại các bạn với các thuật ngữ liên quan đến tầng Data access ở bài sau.

Add a Comment

Scroll Up