Import và khai báo phụ thuộc

Khái niệm

Khi chương trình lớn hơn một tệp hoặc cần dùng thư viện có sẵn, mã nguồn phải khai báo phụ thuộc cần thiết. Cách khai báo phụ thuộc khác nhau giữa các ngôn ngữ, nhưng mục tiêu chung là cho phép sử dụng các hàm, kiểu dữ liệu hoặc hằng số đã được định nghĩa ở nơi khác.

Ví dụ dùng thư viện chuẩn

import math

print(math.sqrt(9))
program ImportDemo;

uses Math;

begin
  Writeln(Sqrt(9):0:2);
end.
#include <math.h>
#include <stdio.h>

int main(void) {
	printf("%.2f\n", sqrt(9.0));
	return 0;
}
using System;

Console.WriteLine(Math.Sqrt(9));
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.Sqrt(9))
}
use std::f64::consts::PI;

fn main() {
	println!("{:.2}", PI);
}
#include <cmath>
#include <iostream>
using namespace std;

int main() {
    cout << sqrt(9.0) << endl;
    return 0;
}
// JavaScript có Math sẵn, không cần import
console.log(Math.sqrt(9));
// TypeScript có Math sẵn, không cần import
console.log(Math.sqrt(9));

Ghi chú theo ngôn ngữ

Thông tin</div>

Python dùng import module hoặc from module import name để đưa mã từ file khác vào. Không cần khai báo trước khi import — Python tự tìm module trong sys.path.

Pascal dùng uses để khai báo unit cần dùng. Đây là cơ chế quen thuộc khi tổ chức chương trình thành nhiều phần riêng biệt.

C dùng #include — một lệnh tiền xử lý (preprocessor directive) — để chèn nội dung từ file header vào. Đây không phải cơ chế module thực sự; tên hàm và biến trong header có thể xung đột.

C++ dùng #include giống C và bổ sung namespace để tách không gian tên. C++20 giới thiệu import (module), nhưng #include vẫn phổ biến trong mã hiện tại.

C# dùng using để đưa namespace vào phạm vi hiện tại. Không cần khai báo file — trình biên dịch tự tìm kiểu trong các assembly được tham chiếu. Từ C# 10 có global using áp dụng cho toàn dự án.

JavaScript dùng import/export theo chuẩn ES Modules (ESM). Trước đó, Node.js dùng require() theo CommonJS. Hiện nay ESM được khuyến dùng.

TypeScript sử dụng cú pháp import/export giống ESM. Khi biên dịch sang JavaScript, TypeScript có thể xuất ra dạng CommonJS hoặc ESM tuỳ cấu hình.

Go dùng import "package/path" — tên package, không phải tên file. Package path thường là đường dẫn trong module. import . "pkg" đưa tên trực tiếp vào scope (không khuyến khích vì dễ xung đột tên).

Rust dùng use để đưa tên từ module khác vào phạm vi hiện tại. Tổ chức module trong Rust gắn chặt với hệ sinh thái Cargo và cấu trúc crate.

Bình luận