Image default
Máy Tính

Hello World là gì? Khám phá hành trình và tầm quan trọng của chương trình cơ bản nhất trong lập trình

Chắc hẳn bạn đã từng nghe về “Hello World” – nghi thức khởi đầu cho mọi lập trình viên. Nhưng ý nghĩa thực sự của nó là gì và tại sao chúng ta lại sử dụng nó? Hãy cùng tincongnghemoi.com khám phá lịch sử thú vị của chương trình này và cách nó tiết lộ các đặc điểm độc đáo của từng ngôn ngữ lập trình.

Hello World là gì?

Dù bạn là người mới bắt đầu lập trình hay đang học ngôn ngữ thứ bảy của mình, một chương trình mẫu đơn giản luôn là điểm khởi đầu hữu ích. Việc chạy thành công bất kỳ chương trình nào cũng là một bước tiến lớn, và để làm được điều đó, không gì tốt hơn là bắt đầu với một ví dụ đã được thử nghiệm và kiểm chứng: Hello World.

Hello World có lẽ là đoạn mã đơn giản nhất mà bạn có thể tưởng tượng. Nó chỉ có một yêu cầu rất cơ bản:

  • In dòng chữ “hello, world” ra màn hình.

Và thế là xong! Tất nhiên, văn bản chính xác—bao gồm cả dấu câu—có thể khác nhau và không quá quan trọng. “Hello, world” chỉ đơn giản là một thông điệp vui vẻ, tích cực để bạn thấy khi chạy chương trình đầu tiên của mình.

Màn hình máy tính hiển thị các dòng mã nguồn Hello World cơ bảnMàn hình máy tính hiển thị các dòng mã nguồn Hello World cơ bản

Thật khó để xác định chính xác nguồn gốc của Hello World, nhưng ví dụ cụ thể sớm nhất mà chúng ta có được là từ cuốn sách ‘A Tutorial Introduction to the Language B’ (1972):

main( ) {    extrn a, b, c;    putchar(a); putchar(b); putchar(c); putchar('!*n');}a 'hell';b 'o, w';c 'orld';

B là một ngôn ngữ cổ xưa, tiền thân của C. Hello World có thể đã xuất hiện sớm hơn nữa, vào năm 1967 với một ngôn ngữ gọi là BCPL, nhưng không có bằng chứng chắc chắn về điều này.

Khái niệm này thực sự trở nên nổi tiếng với sự ra đời của cuốn sách kinh điển The C Programming Language vào năm 1978. Cuốn sách này, bằng cách đưa chương trình Hello World làm ví dụ mã đầu tiên, đã thiết lập một truyền thống kéo dài cho đến ngày nay.

Tầm quan trọng của Hello World trong lập trình

Hello World phục vụ hai mục đích chính. Đầu tiên, nó đóng vai trò là một ví dụ chuẩn hữu ích để so sánh các ngôn ngữ. Vì mục đích của chương trình rất đơn giản và dễ hiểu, nó có thể dạy chúng ta rất nhiều về cú pháp của một ngôn ngữ. Một lập trình viên có kinh nghiệm có thể nhìn vào chương trình Hello World được viết bằng một ngôn ngữ mà họ không biết gì, và bắt đầu tìm hiểu về nó.

Nhưng Hello World cũng có các ứng dụng thực tế. Chạy thành công chương trình mẫu này là một bước tiến lớn trong việc viết bất kỳ chương trình nào khác bằng cùng một ngôn ngữ. Nó yêu cầu một trình biên dịch hoặc trình thông dịch phù hợp để chạy chương trình. Nó sẽ xác nhận rằng hệ điều hành cơ bản xử lý đầu ra của nó một cách chính xác. Và nó có thể giúp bạn cấu hình IDE để làm việc với ngôn ngữ đó.

Hello World qua các ngôn ngữ lập trình phổ biến

Bạn có thể tìm hiểu rất nhiều về một ngôn ngữ thông qua việc triển khai Hello World của nó. Vì mỗi chương trình này sẽ hoạt động chính xác như nhau, bạn cũng có thể sử dụng một bộ các tệp nguồn hello.* để kiểm tra môi trường phát triển của mình.

Hello World trong C

Như đã đề cập, ví dụ đáng tin cậy đầu tiên về Hello World mà chúng ta biết là trong C, có từ năm 1978:

main() {    printf("hello, worldn");}

Mười năm sau, phiên bản thứ hai của cuốn sách đã cập nhật ví dụ này để tương thích với ANSI C:

#include <stdio.h>
main() {    printf("hello, worldn");}

Tuy nhiên, ngày nay, ngay cả phiên bản này cũng cần được cập nhật; một trình biên dịch C hiện đại sẽ báo lỗi khi bạn cố gắng biên dịch chương trình này. Chuẩn C99 nghiêm ngặt hơn ANSI C; nó yêu cầu cú pháp sau:

#include <stdio.h>
int main() {    printf("hello, worldn");}

Có ba phần chính trong phiên bản Hello World của C:

  • Một lời gọi đến hàm printf (“print formatted”), thực hiện công việc chính. Hàm này in một đối số chuỗi (văn bản bên trong dấu ngoặc kép) ra đầu ra chuẩn. Ký tự n ở cuối chuỗi đại diện cho ký tự xuống dòng (newline).
  • Câu lệnh #include ở đầu tải một thư viện (stdio) cung cấp chức năng đầu ra (và đầu vào). Thư viện này chứa mã thực tế cho hàm printf. Một điểm đặc biệt của C là nó không chứa các hàm dựng sẵn; bạn có thể viết hàm của riêng mình, nhưng để gọi bất kỳ hàm nào khác, bạn sẽ cần một câu lệnh #include phù hợp.
  • Dòng printf nằm bên trong một hàm có tên “main.” Đối với C, đây là một hàm đặc biệt sẽ tự động chạy khi bạn thực thi chương trình đã biên dịch. Lưu ý rằng phiên bản C gần đây nhất yêu cầu bạn khai báo kiểu trả về “int” (số nguyên) cho hàm main, ngay cả khi hàm của bạn không trả về giá trị nào.

Tuy nhiên, mã Hello World chỉ là một phần của câu đố. Nửa còn lại là chạy chương trình. Với một ngôn ngữ được biên dịch như C, bạn cần chạy một chương trình để dịch mã nguồn của mình thành một tệp thực thi nhị phân độc lập:

gcc hello.c

Nếu mọi thứ đều ổn, trình biên dịch sẽ chạy ngầm và tạo ra một tệp thực thi trong thư mục hiện tại của bạn có tên a.out. Chạy chương trình đó (./a.out), và bạn sẽ thấy mã của mình hoạt động:

Chương trình Hello World trong C được biên dịch và chạy trên cửa sổ TerminalChương trình Hello World trong C được biên dịch và chạy trên cửa sổ Terminal

Đây chính xác là cách một chương trình Hello World chính xác nên hoạt động, in văn bản ra terminal của bạn, với một dòng mới ở cuối, sau đó kết thúc.

Hello World trong Go

Go là một ngôn ngữ tương đối hiện đại. Nó được phát hành vào năm 2009 và được tạo bởi các kỹ sư của Google, bao gồm Ken Thompson, người đã phát minh ra ngôn ngữ B. Go có cú pháp đơn giản, rất giống với C:

package main

import "fmt"

func main() {    fmt.Println("hello, world")}

Bạn có thể chạy chương trình này bằng lệnh go run hello.go hoặc biên dịch một tệp thực thi bằng go compile hello.go và chạy nó bằng ./hello.

Hệ thống package của Go sẽ giúp bạn tổ chức mã của mình và tái sử dụng chức năng theo các nguyên tắc kỹ thuật vững chắc. Tuy nhiên, đối với một chương trình đơn giản như Hello World, bạn chỉ cần khai báo rằng nó thuộc về “package main” và đảm bảo bạn có một hàm main để hoạt động như điểm khởi đầu mặc định.

Hello World trong Rust

Việc triển khai Hello World trong Rust rất tối giản, bạn có thể nghĩ rằng nó không cho chúng ta biết điều gì. Nhưng ngay cả đoạn mã đơn giản này cũng chứa một số sắc thái thú vị của ngôn ngữ.

fn main() {    println!("hello, world");}

Lời gọi đến println—trông rất giống một hàm—bao gồm một dấu chấm than sau tên của nó. Điều này có nghĩa là println thực sự là một macro, không phải một hàm; bạn phải gọi nó bằng cú pháp dấu chấm than.

Hình ảnh minh họa laptop với logo ngôn ngữ lập trình Rust trên màn hìnhHình ảnh minh họa laptop với logo ngôn ngữ lập trình Rust trên màn hình

Giống như C, hàm main đóng vai trò là điểm vào cho chương trình độc lập này. Không giống như C—và hầu hết các ngôn ngữ khác—từ khóa của Rust để khai báo một hàm rất ngắn gọn: fn. Điều này phù hợp với phần lớn ngôn ngữ, vốn sử dụng các từ khóa ngắn như “pub,” “mut,” và “ref.”

Bạn có thể biên dịch chương trình này bằng rustc hello.rs, và chạy tệp thực thi được tạo bằng ./hello.

Hello World trong Python

Hello World của Python nổi bật là một trong những ngôn ngữ tối giản nhất. Điều này phù hợp với danh tiếng của nó là một ngôn ngữ đơn giản, đặc biệt phù hợp cho người mới bắt đầu. Toàn bộ chương trình chỉ là:

print('hello, world')

Python là một ngôn ngữ thông dịch, vì vậy bạn có thể sử dụng lệnh python để chạy trực tiếp các chương trình Python. Lưu đoạn mã trên vào một tệp (hello.py), chạy nó (python hello.py), và bạn sẽ thấy đầu ra quen thuộc.

Lưu ý rằng hàm print() của Python thêm một ký tự xuống dòng theo mặc định, vì vậy bạn không cần phải thêm n vào chuỗi của mình. Cũng lưu ý rằng, không giống như C, bạn có thể đặt một chuỗi văn bản Python trong dấu nháy đơn hoặc dấu nháy kép.

Hello World trong Java

Java khá ngược lại với Python. Nó thường được gọi là một ngôn ngữ dài dòng, và chương trình Hello World của nó không làm thay đổi điều đó:

public class HelloWorld {    public static void main(String[] args) {        System.out.print("hello, worldn");    }}

Trong Java, ngay cả một chương trình độc lập đơn giản cũng phải được biểu diễn bằng một lớp (class), và hàm tương đương main() của C trong Java có ba từ khóa bổ trợ:

  • public là một bộ chỉ định truy cập cho biết hàm có thể truy cập được trên toàn bộ chương trình.
  • static là một từ khóa cho biết đây là một phương thức của lớp (class method), không phải một phương thức của đối tượng (instance method).
  • void là một kiểu trả về cho biết hàm không trả về giá trị.

Bạn không cần phải biết tất cả các chi tiết đằng sau ba từ khóa này, nhưng bạn sẽ cần phải nhớ chúng để viết bất kỳ chương trình Java nào.

Thậm chí phải gõ khá nhiều để gọi hàm in của Java. Chuỗi “System.out.” trước “print” xác định luồng đầu ra chuẩn, mà các ngôn ngữ khác sử dụng theo mặc định.

Bạn sẽ cần biết một điểm đặc biệt cuối cùng của Java trước khi có thể chạy Hello World: tên tệp. Do cách tiếp cận ưu tiên lớp của Java, tệp bạn lưu mã của mình cần được đặt tên theo lớp công khai của nó: HelloWorld.java. Sau khi bạn đã tạo tệp đó, hãy chạy javac HelloWorld.java tiếp theo là java HelloWorld để yêu cầu trình thông dịch Java chạy chương trình của bạn.

Kết luận

Mỗi ngôn ngữ lập trình đều độc đáo, nhưng ngay cả giữa các ngôn ngữ đa dạng như những ví dụ trên, bạn vẫn có thể nhận thấy những điểm tương đồng nhất định. Quan trọng nhất, một khi bạn có thể chạy Hello World, bạn có thể tập trung vào những chi tiết cụ thể của ngôn ngữ mà bạn đang học. Chương trình đơn giản này không chỉ là một bài kiểm tra môi trường mà còn là cánh cửa mở ra thế giới lập trình đầy thú vị.

Bạn đã từng thử chạy “Hello World” bằng ngôn ngữ nào chưa? Hãy chia sẻ kinh nghiệm và suy nghĩ của bạn về chương trình kinh điển này trong phần bình luận bên dưới!

Related posts

Cách Kết Nối AirPods Với Chromebook: Hướng Dẫn Từng Bước Từ A-Z

Administrator

Tối Ưu Năng Suất Làm Việc: Tại Sao Tôi Loại Bỏ Mọi Biểu Tượng Trên Màn Hình?

Administrator

Hướng Dẫn Chi Tiết Sử Dụng Hàm AVERAGEIF và AVERAGEIFS Trong Excel

Administrator