✨Tầm vực (khoa học máy tính)

Tầm vực (khoa học máy tính)

Trong lập trình máy tính, tầm vực (tiếng Anh: scope) của một ràng buộc tên – liên kết tên với một thực thể, ví dụ như biến – là một vùng của chương trình máy tính nơi liên kết hợp lệ: khi tên có thể được dùng để chỉ đến thực thể. Một khu vực như vậy được gọi là **** (scope block). Trong các phần khác của chương trình, tên có thể chỉ để các thực thể khác (nó có thể có ràng buộc khác), hay không có gì cả (nó có thể không bị ràng buộc).

Phạm vi của một ràng buộc còn được gọi là khả năng hiển thị (visibility) của một thực thể, đặc biệt trong các tài liệu kỹ thuật cũ hơn – điều này xuất phát từ quan điểm thực thể được tham chiếu, chứ không phải tên tham chiếu. Tầm vực là một phần của chương trình hoặc có thể là tầm vực cho một tập hợp các ràng buộc – một định nghĩa chính xác rất khó, nhưng trong trường hợp thông thường và trong thực tế thường tương ứng với một khối, một hàm, hay một tập tin, tùy thuộc vào ngôn ngữ và loại của thực thể. Thuật ngữ "tầm vực" cũng được sử dụng để chỉ tập hợp tất cả các thực thể có thể thấy được hay tên hợp lệ trong một phần của chương trình hoặc tại một thời điểm nhất định trong chương trình, mà thường được gọi chính xác hơn là ngữ cảnh (context) hay môi trường (environment).

Nói một cách chặt chẽ hơn và trong thực tế với hầu hết các ngôn ngữ lập trình, "một phần của chương trình" đề cập đến "một phần của mã nguồn (khu vực văn bản)", và được gọi là tầm vực từ vựng (lexical scope). Tuy nhiên trong một số ngôn ngữ, "một phần chương trình" đề cập đến "một phần của thời gian chạy (khoảng thời gian trong khi thực thi)", và được gọi là tầm vực động (dynamic scope). Cả hai thuật ngữ đó đều có chút sai lệch – chúng sử dụng sai thuật ngữ kỹ thuật, như đã thảo luận trong phần định nghĩa – nhưng bản thân sự khác biệt là chính xác, và đó là những thuật ngữ tương ứng tiêu chuẩn. Tầm vực từ vựng là trọng tâm của bài viết này, với tầm vực động được hiểu là ngược lại với tầm vực từ vựng.

Trong hầu hết các trường hợp, phân giải tên (name resolution) dựa trên tầm vực từ vựng tương đối đơn giản để sử dụng và hiện thực, vì khi sử dụng người ta có thể đọc ngược mã nguồn để xác định thực thể nào mà tên chỉ đến, và khi hiện thực người ta có thể duy trì một danh sách các tên và ngữ cảnh khi biên dịch hay thông dịch một chương trình. Khó khăn phát sinh khi name masking, forward declaration, và hoisting, trong khi những khó khăn đáng kể phát sinh với biến phi cục bộ, đặc biệt trong bao đóng.

Định nghĩa

Các cấp độ của tầm vực

Tầm vực có thể thay đổi từ mức độ ít nhất như một biểu thức đơn cho đến nhiều nhất là toàn bộ chương trình, với nhiều mức độ ở giữa. Quy tắc tầm vực đơn giản nhất là tầm vực toàn cục (global scope) – tất cả các thực thể đều được hiển thị (visible) trong toàn bộ chương trình. Quy tắc tầm vực mô đun cơ bản nhất là tầm vực hai cấp, với một tầm vực toàn cục trong chương trình, và tầm vực cục bộ (local scope) trong một hàm. Lập trình mô đun phức tạp hơn cho phép một tầm vực mô đun tách rời, trong đó tên được hiển thị trong mô đun (riêng tư (private) với mô đun) nhưng không hiển thị bên ngoài mô đun đó. Với hàm, trong một số ngôn ngữ như C, cho phép tầm vực khối (block scope) để giới hạn tầm vực đối với môtj tập con của một hàm; còn với một số ngôn ngữ lập trình chức năng đáng chú ý khác, lại cho phép tầm vực biểu thức (expression scope), để giới hạn tầm vực cho một biểu thức đơn. Các tầm vực khác bao gồm tầm vực tập tin (file scope) (đáng chú ý trong C), có chức năng tương tự như tầm vực mô đun, và tầm vực khối ở bên ngoài của hàm (đáng chú ý trong Perl).

Một vấn đề khó phân biệt chính xác là khi nào một tầm vực bắt đầu và kết thúc. Trong một số ngôn ngữ như C, một tầm vực bắt đầu khi khai báo, và do vậy các tên khác nhau được khai báo trong một khối nhất định có thể có tầm vực khác nhau. Điều này đòi hỏi phải khai báo hàm trước khi dùng, mặc dù không nhất thiết phải định nghĩa chúng, và yêu cầu tiền khai báo (forward declaration) trong một số trường hợp, đáng chú ý trong đệ quy hỗ tương (mutual recursion). Trong các ngôn ngữ khác, như JavaScript hay Python, tầm vực của tên bắt đầu khi có khối liên quan (như bắt đầu của một hàm), bất kể nó được định nghĩa ở đâu, và tất cả tên trong một khối nhất định có cùng tầm vực; trong JavaScript điều này được gọi là variable hoisting. Tuy nhiên, khi tên bị ràng buộc với một giác khi khác nhau, và hành vi của các tên trong ngữ cảnh có giá trị không được xác định (undefined variable) khác nhau: trong Python việc sử dụng biến không xác định sẽ gây ra lỗi lúc chạy (runtime error), trong khi với JavaScript biến không xác định cón thể sử dụng được (với giá trị không xác định), nhưng định nghĩa hàm cũng được kéo lên đỉnh của hàm chứa và có thể sử dụng trong toàn hàm.

Tầm vực tập tin

Tầm vực khối

Tầm vực hàm

Tầm vực toàn cục

Tầm vực từ vựng vs. tầm vực động

Tầm vực từ vựng

Tầm vực động

👁️ 2 | 🔗 | 💖 | ✨ | 🌍 | ⌚
Khoa học máy tính nghiên cứu các cơ sở lý thuyết của thông tin và tính toán, cùng với các kỹ thuật thực tiễn để thực hiện và
**Khoa học máy tính lý thuyết** () là một tập hợp con của khoa học máy tính và toán học tập trung vào nhiều chủ đề toán học hơn của điện toán và bao gồm
**John McCarthy** (4 tháng 9 năm 1927 - 24 tháng 10 năm 2011) là một nhà khoa học máy tính và nhà khoa học nhận thức người Mỹ. McCarthy là một trong những người sáng
Trong lập trình máy tính, **tầm vực** (tiếng Anh: _scope_) của một ràng buộc tên – liên kết tên với một thực thể, ví dụ như biến – là một vùng của chương trình máy
Trong khoa học máy tính, một hàm hay biểu thức được cho là có **hiệu ứng lề** hay **tác dụng phụ** (_side effect_) nếu nó thay đổi một số trạng thái ngoài tầm vực của
**Phòng thí nghiệm khoa học máy tính và trí tuệ nhân tạo MIT (CSAIL) **là một phòng thí nghiệm nghiên cứu tại viện công nghệ Massachusetts thành lập bởi sự sáp nhập vào năm 2003
thumb|upright=1.35|right|Ảnh từ vệ tinh [[Apollo 15 đơn vị quỹ đạo của rille lân cận với miệng núi lửa Aristarchus trên Mặt Trăng.]] **Khoa học hành tinh** là ngành khoa học nghiên cứu về các hành
Mô hình 3D với DirectX 9.0: Ấm trà Utah **Đồ họa máy tính** () là một lĩnh vực của khoa học máy tính nghiên cứu về cơ sở toán học, các thuật toán cũng như
**Mạng lưới Quỹ Khoa học Quốc gia** (**National Science Foundation Network -** **NSFNET** ) là một chương trình phối hợp, phát triển các dự án do Quỹ Khoa học Quốc gia (NSF) tài trợ bắt
thumb | [[Hoá học là một phân nhánh của khoa học tự nhiên]] **Khoa học** là một hệ thống kiến thức về những định luật, cấu trúc và cách vận hành của thế giới tự
[[Phần cứng|Phần cứng máy tính là nền tảng cho xử lý thông tin (sơ đồ khối). ]] **Lịch sử phần cứng máy tính** bao quát lịch sử của phần cứng máy tính, kiến trúc của
Trong giáo dục, **Tư duy tính toán** hay **Tư duy máy tính** (Computational Thinking - CT) là một tập hợp các phương pháp giải quyết vấn đề liên quan đến việc diễn đạt các vấn
nhỏ|269x269px|Một góc của Trường Đại học Khoa học Tự nhiên cơ sở 227 Nguyễn Văn Cừ **Trường Đại Học Khoa Học Tự Nhiên, Đại học Quốc gia Thành phố Hồ Chí Minh** ( – **VNUHCM-US**
**Máy tính bảng** (Tiếng Anh: Tablet computer hay tablet PC), là một thiết bị di động, thông thường có hệ điều hành di động và mạch xử lý, màn hình cảm ứng và viên pin
**Trung tâm Nghiên cứu Khoa học Quốc gia Pháp** (_tiếng Pháp_: **Centre National de la Recherche Scientifique**), gọi tắt là **CNRS** là cơ quan nghiên cứu thuộc chính phủ lớn nhất tại Pháp và là
**Trung tâm Máy tính Triều Tiên** (**KCC**) là trung tâm nghiên cứu công nghệ thông tin hàng đầu của chính phủ Cộng hòa Dân chủ Nhân dân Triều Tiên. Thành lập vào ngày 24 tháng
**Viện hàn lâm Khoa học quốc gia Ukraina** (tiếng Ukraina: Національна академія наук України, _Natsional’na akademiya nauk Ukrayiny_, viết tắt **NANU**, tiếng Anh: National Academy of Sciences of Ukraine, viết tắt **NASU**) là cơ quan
**Khoa học thông tin** (còn được gọi là **nghiên cứu thông tin**) là một lĩnh vực học thuật chủ yếu quan tâm đến phân tích, thu thập, phân loại, xử lý, lưu trữ, tìm kiếm,
**Khoa học thể thao** là một bộ môn nghiên cứu sự hoạt động của cơ thể người khỏe mạnh khi vận động, và tác dụng nâng cao sức khỏe của thể thao và hoạt động
Não người được vẽ theo dữ liệu MRI **Khoa học nhận thức** (tiếng Anh: _cognitive science_) thường được định nghĩa là ngành nghiên cứu về bản chất của trí tuệ . Hầu như tất cả
**Mary Kenneth Keller** (17 tháng 12 năm 1913 - 10 tháng 1 năm 1985) là một nữ tu của dòng "Nữ tu Bác ái Đức Trinh nữ Maria" (B.V.M.) tại Dubuque thuộc Giáo hội Công
**Học máy** hay **máy học** (_machine learning_) là một lĩnh vực của trí tuệ nhân tạo liên quan đến việc nghiên cứu và xây dựng các kĩ thuật cho phép các hệ thống "học" tự
**Viện Hàn lâm Khoa học và Công nghệ Việt Nam** (tiếng Anh: **_Vietnam Academy of Science and Technology_**, viết tắt là **VAST**) là cơ quan thuộc Chính phủ, thực hiện chức năng nghiên cứu cơ
Viện Nghiên cứu & Sáng tạo Khoa học Máy tính - IRICS được thành lập theo hướng phát triển và nghiên cứu trong các lĩnh vực khoa học máy tính.IRICS dần trở thành viện nghiên
**Đại học Khoa học và Công nghệ Pohang** (**POSTECH**) (Tiếng Hàn: 포항공과대학교, Tiếng Anh: Pohang University of Science and Technology, Hanja: 浦項工科大學校) là một trường đại học tư thục tọa lạc tại 77 Cheongam-ro (San
Đại dịch COVID-19 đã ảnh hưởng đến nhiều tổ chức khoa học trên toàn thế giới, dẫn đến giảm năng suất trong một số lĩnh vực và chương trình. Tuy nhiên, ảnh hưởng của đại
Sự đa dạng của các đột biến di truyền được minh họa bằng cảnh bãi biển San Diego với các vi khuẩn sống được thể hiện 8 màu sắc khác nhau của các protein huỳnh
**Donald Ervin Knuth** (sinh ngày 10 tháng 1, năm 1938) là một nhà khoa học máy tính nổi tiếng hiện đang là giáo sư danh dự tại Đại học Stanford. Knuth được biết đến nhiều
nhỏ|382x382px|Trụ sở của Đại học Khoa học Sự sống Lublin (Website: https://www.up.lublin.pl/) **Đại học Khoa học Sự sống Lublin** là một cơ sở giáo dục công lập của Nhà nước Ba Lan, được thành lập
**Ngôn ngữ học** hay **ngữ lý học** là bộ môn nghiên cứu về ngôn ngữ. Người nghiên cứu bộ môn này được gọi là nhà ngôn ngữ học. Nói theo nghĩa rộng, nó bao gồm
thumb|right|348x348px|Bìa của bài thơ có chủ đề tiến hóa của [[Erasmus Darwin, _Temple of Nature_ cho thấy một nữ thần vén bức màn bí ẩn của thiên nhiên (bên trong là Artemis). Tượng trưng và
**Trí tuệ nhân tạo** (**TTNT**) (tiếng Anh: **_Artificial intelligence_**, viết tắt: **_AI_**) là khả năng của các hệ thống máy tính thực hiện các nhiệm vụ liên quan đến trí thông minh của con người,
**Khoa học và công nghệ luận** hay **khoa học, công nghệ và xã hội** (STS) là lĩnh vực nghiên cứu về tương tác qua lại giữa văn hóa, xã hội, chính trị với nghiên cứu
**Trí tuệ nhân tạo tổng quát** (**Artificial general intelligence**, hay **AGI**) là một loại trí tuệ nhân tạo (AI) trong lý thuyết, nằm giữa cận dưới và cận trên của năng lực nhận thức con
**John von Neumann** (**Neumann János**; 28 tháng 12 năm 1903 – 8 tháng 2 năm 1957) là một nhà toán học người Mỹ gốc Hungary và là một nhà bác học thông thạo nhiều lĩnh
**Tâm trí** là tập hợp các lĩnh vực bao gồm các khía cạnh nhận thức như ý thức, trí tưởng tượng, nhận thức, suy nghĩ, trí thông minh, khả năng phán quyết, ngôn ngữ và
thumb|220x124px | right | Một thông tin được mã hoá bởi các dòng mã (code) **Tin học** hay **khoa học thông tin** (gọi tắt là **tin**) (, ) là một ngành khoa học chuyên nghiên
**Trường Đại học Hạ Long** (Ha Long University) là trường công lập, trực thuộc Ủy ban Nhân dân tỉnh Quảng Ninh. Trường Đại học Hạ Long đào tạo đa ngành, đa lĩnh vực, cung cấp
**Tin sinh học** (_bioinformatics_) là một lĩnh vực khoa học sử dụng các công nghệ của các ngành toán học ứng dụng, tin học, thống kê, khoa học máy tính, trí tuệ nhân tạo, hóa
**Edsger Wybe Dijkstra** (; 11 tháng 5 năm 1930 tại Rotterdam – 6 tháng 8 năm 2002 tại Nuenen), là nhà khoa học máy tính người Hà Lan. Ông được nhận giải thưởng Turing năm
thumb|**[[Phép tính lambda** là một hệ thống hình thức để định nghĩa hàm, ứng dụng hàm và đệ quy được Alonzo Church đề xuất vào những năm 193x.]] **Lý thuyết ngôn ngữ lập trình** (thường
nhỏ| Một sơ đồ cho thấy cách người dùng tương tác với [[phần mềm ứng dụng trên một máy tính để bàn thông thường. Lớp phần mềm ứng dụng giao tiếp với hệ điều hành,
Trong khoa học máy tính, đặc biệt là trong biểu diễn tri thức và siêu logic học, lĩnh vực **suy luận tự động** (automated reasoning) được dành riêng cho việc hiểu các khía cạnh khác
Một nhân viên giám định đang xem xét hiện trường **Giám định pháp y** hay **Pháp y** các hoạt động giám định trong lĩnh vực y khoa để phục vụ cho công tác pháp luật,
**Jeffrey Preston Bezos** (; né **Jorgensen**; sinh ngày 12 tháng 1 năm 1964) là doanh nhân, nhà tư bản công nghiệp, trùm truyền thông và nhà đầu tư người Mỹ. Bezos được biết đến như
**Marvin Lee Minsky** (9 tháng 8 năm 1927 – 24 tháng 1 năm 2016) là một nhà khoa học nhận thức trong lĩnh vực trí tuệ nhân tạo (AI) người Mỹ, đồng sáng lập của
**Ngôn ngữ học tính toán** là một lĩnh vực liên ngành liên quan đến mô hình thống kê hoặc dựa theo luật của ngôn ngữ tự nhiên từ góc độ tính toán cũng như nghiên
nhỏ|430x430px|BrdU (màu đỏ), thể hiện quá trình neurogenesis trong trung khu dưới hạt (SGZ) của vùng DG hồi hải mã. Hình ảnh minh họa này của Faiz và cộng sự, năm 2005. **Khoa học thần
**Trường Đại học Quảng Bình** ra đời ngày 24/10/2006 theo quyết định số 237/QĐ-TTg của Thủ tướng Chính phủ, trên cơ sở Trường Cao đẳng Sư phạm Quảng Bình, mà tiền thân là Trường Trung
Phần mềm là các lệnh được lập trình mà được lưu trữ trong bộ nhớ được lưu trữ của các máy tính kỹ thuật số để bộ xử lý thực hiện. Phần mềm là một