Trang Chủ   Vn+ TiVi   Fanpage Twitter  Fanpage FaceBook
Loading
                                         

Bản Tin Câu Lạc Bộ Pa Tin Im-Pod                                                                          
Diễn đàn Vn+
Tiêu Điểm

Tình Yêu - Giới Tính

1001 Bí Ẩn

Tổng hợp phần mềm

Ebook

Thủ Thuật IT

Thủ Thuật Blog

Video Clip

Lạ & Fun


You are not connected. Please login or register

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down  Thông điệp [Trang 1 trong tổng số 1 trang]

1Tầm Vực của Biến trong autoit Empty Tầm Vực của Biến trong autoit Mon Aug 22, 2011 5:23 pm

Trunks-Kun

Trunks-Kun
Administrator
Administrator
Đây là hướng dẫn nói về 3 từ khóa Dim, Local, Global mà mọi người đã gặp trong các bài hướng dẫn trước đây. Ngoài ra tụi mình sẽ làm quen với 1 khái niệm mới đó là Tầm Vực của Biến, hay nói dễ hiểu hơn là phạm vi hoạt động của Biến.

- Trong AutoIT, biến chỉ có được tạo ra và hoạt động ở 2 khu vực đó là Bên Trong Hàm và Bên Ngoài Hàm. Dim, Local và Global sẽ là những từ khóa nhằm tạo ra biến rồi cấp quyền cho biến luôn, để những biến đó có thể hoạt động trong cả 2 hay chỉ 1 khu vực nào đó mà thôi.

Tầm Vực của Biến trong autoit File

- Đầu tiên ta sẽ xét biến được tạo ra từ Bên Ngoài Hàm, những biến loại này rất dễ xét vì dù là Dim, Local hay Global thì chúng đều có thể hoạt động ở cả 2 khu vục.

Code:
    AutoItSetOption("MustDeclareVars",1)
   
    Local $var = "AutoIT Việt"  ;Khai báo biến $var
    Global $var2 = "LeeSai"    ;Khai báo biến $var2
    Dim $var3 = "72ls.net"      ;Khai báo biến $var3
   
    msgbox(0,"Bên Ngoài Hàm","$var= "&$var)
    msgbox(0,"Bên Ngoài Hàm","$var2= "&$var2)
    msgbox(0,"Bên Ngoài Hàm","$var3= "&$var3)
   
    _func1()    ;Gọi hàm 1
    Func _func1()
        msgbox(0,"Bên Trong Hàm","$var= "&$var)
        msgbox(0,"Bên Trong Hàm","$var2= "&$var2)
        msgbox(0,"Bên Trong Hàm","$var3= "&$var3)
    EndFunc

- Chỉ khi biến được tạo từ Bên Trong Hàm thì đáng bàn, vì lúc này vai trò của Dim, Local và Global mới thể hiện rõ:

Local: Tiếng Anh có nghĩa là khu vực, tức là biến thuộc loại này chỉ có tác dụng trong khu vục của Hàm mà nó được tạo ra thôi, trong ví dụ bên dưới bạn sẽ thấy biến $var được tạo ra và gán giá trị ở Bên Trong Hàm _func1() cho nên hàm MsgBox() thứ nhất được phép dùng $var vì nó cũng ở Bên Trong Hàm và cậu lệnh như vậy được xem là Đúng, nhưng đến lệnh MsgBox() thứ 2 thì lại nằm ở Bên Ngoài Hàm cho nên lệnh đó xem như là lỗi, vì lúc này biến $var không được phép hoạt động ở Bên Ngoài Hàm.


Code:
    _func1() ;Lệnh gọi Hàm
    Func _func1()
        Local $var = "AutoIT Việt"
        MsgBox(0,"Bên Trong",$var) ;Đúng
    EndFunc
   
    MsgBox(0,"Bên Ngoài",$var)  ;Lỗi

Global: Global có nghĩa là Toàn Bộ, hiểu theo đúng nghĩa đen tức là biến thuộc loại Global sẽ hoạt động trong Toàn Bộ chương trình bất kể là bên trong hay bên ngoài hàm. Điều này có nghĩa rằng với ví dụ ở trên thì 2 lệnh MsgBox() đều Đúng.

Code:
    _func1() ;Lệnh gọi Hàm
    Func _func1()
        Global $var = "AutoIT Việt"
        msgbox(0,"Bên Trong",$var) ;Đúng
    EndFunc
   
    msgbox(0,"Bên Ngoài",$var)    ;Đúng


Bài viết được đăng trên autoit.72ls.net, mong đọc giả vào xem để ủng hộ Anh Em trong Forum viết tiếp.
- Mở rộng ví dụ ra 1 tý, giả sử không có Lệnh Gọi Hàm, tức là không có dòng số 1 thì sao? Ta xét từ từ sẽ thấy ngay, nếu không có lệnh gọi hàm tức là _func1() không được thực hiện, đồng nghĩa với việc biến $var được tạo bằng từ khóa Global sẽ không tồn tại, dẫn đến lệnh MsgBox() dùng $var là lỗi. Bạn thử xóa lệnh gọi hàm đi rồi chạy thử code sẽ thấy ngay.

Local và Global: Kết hợp các từ khóa lại với nhau mới thật sự thấy được công dụng của chúng, tụi mình phải chạy thử 2 đoạn code sau và xem chuyện gì xảy ra rồi mới nói tiếp được. Đầu tiên là tạo 1 biến $var với từ khóa Local ở bên ngoài Hàm trước, xong vào bên trong Hàm ta tạo 1 biến cũng có tên là Local $var thêm 1 lần nữa:


Code:
    Local $var = 72
   
    _func1() ;Lệnh gọi Hàm
    Func _func1()
        Local $var = "AutoIT Việt"
        msgbox(0,"Bên Trong",$var) ;Đúng
    EndFunc
   
    msgbox(0,"Bên Ngoài",$var)    ;Đúng

- Sau đó cũng với đoạn code như trên ta thay Local trong hàm bằng Global, chú ý giá trị của $var được xuất ra, rồi tự phân tích xem chuyện gì đã xảy ra. Nếu phân tích đúng tức là bạn đã hiểu rõ về Local và Global:

Code:
    Local $var = 72
   
    _func1() ;Lệnh gọi Hàm
    Func _func1()
        Global $var = "AutoIT Việt"
        msgbox(0,"Bên Trong",$var) ;Đúng
    EndFunc
   
    msgbox(0,"Bên Ngoài",$var)    ;Đúng

- Ở đoạn code thứ nhất biến $var được tạo ở bên ngoài hàm cho nên nó có thể hoạt động trong toàn bộ chương trình. Khi vào _func1() bằng Lệnh gọi hàm tại dòng số 3, thì hàm này lại tạo ra một biến $var nữa với kiểu là Local, mà Local ở bên trong hàm thì chỉ phục vụ cho hàm thôi, nên việc gán "AutoIT Việt" cho $var không ảnh hưởng gì đến $var bên ngoài hàm, dẫn đến lúc thoát khỏi hàm lệnh MsgBox() sẽ sử dụng biến $var ở bên ngoài hàm, tức là $var = 72.

- Điều ngược lại đã xẩy ra ở đoạn code thứ 2. Khi vào _func1(), một biến $var nữa được hàm yêu cầu tạo với kiểu là Global (có tác dụng trong toàn bộ chương trình), nhưng 1 biến tương tự đã được tạo rồi cho nên AutoIT không tạo nữa mà kiu _func1() dùng luôn biến $var đã tạo ở bên ngoài, vậy là ta chỉ có 1 $var duy nhất, đến lúc thoát khỏi hàm lệnh MsgBox() thứ 2 sẽ sử dụng biến $var đã bị gán chuỗi "AutoIT Việt".

Dim: Nếu đã hiểu hết 3 mục ở trên thì mới có thể xem tiếp về Dim. Hiểu theo nghĩa Lập Trình, Dim có nghĩa là Chưa Xác Định <= đây là tớ dịch chứ Từ Điển dịch khác, sở dĩ tớ dịch như vậy vì trước khi tạo biến nó phải kiểm tra xem tên biến cần tạo đã có chưa, nếu chưa thì sẽ tạo theo kiểu Local, nếu đã có rồi thì tạo theo kiểu Global. Chạy thử ví dụ bên dưới rồi xem phân tích sẽ hiểu.

Code:
    Local $var = 72  ;Bõ lệnh này đi dòng số 9 sẽ lỗi
   
    _func1() ;Lệnh gọi Hàm
    Func _func1()
        Dim $var = "AutoIT Việt"
        MsgBox(0,"Bên Trong",$var) ;Đúng
    EndFunc
   
    MsgBox(0,"Bên Ngoài",$var)


- Như bạn thấy code trên khi chạy không hề báo lỗi ở dòng số 9 (MsgBox thứ 2) và xuất ra chuỗi "AutoIT Việt" giống như ví dụ thứ 2 trong mục 3, vì biến $var đã được tạo ở dòng số 1 cho nên lệnh Dim trong _func1() sẽ hoạt động như lệnh Global. Và nếu ta bỏ dòng số 1 đi thì dòng số 9 sẽ báo lỗi giống như ví dụ ở mục 1 (Local), vì như thế biến $var sẽ chưa hề tồn tại trước khi gặp Dim.


- Theo mặc định AutoIT cho phép bạn bỏ qua việc dùng 3 từ khóa trên khi tạo biến, đối với những bạn rành về lập trình rồi thì đây là 1 lợi ích, nhưng với những bạn mới làm quen thì đây lại là 1 phiền phức vì Tầm Vực của Biến vốn đã khó hiểu nay lại càng khó hiểu hơn, chính vì vậy mà AutoIT đã đưa ra 1 lựa chọn để các bạn mới dễ học lập trình hơn đó là:

Code:
    AutoItSetOption("MustDeclareVars",1)

- Câu lệnh này sẽ làm cho AutoIT nhắc nhở Lập Trình Viên nói rõ biến được tạo thuộc loại Dim, Local hay Global, nếu chưa nói rõ mà đã dùng biến thì xem như lỗi. Muốn tắt chế độ này đi thì ta chỉ cần bỏ dòng lệnh hoặc thay số 1 bằng số 0 thôi:

Code:
AutoItSetOption("MustDeclareVars",1)
   
    $var = "72ls.net" ;Lỗi dùng biến khi chưa có Khai Báo
   
    Dim $var = "AutoIT Việt" ;Đúng
    $var = 7 ;Đúng
    $var = 2 ;Đúng

nguồn autoit.72ls.net

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang  Thông điệp [Trang 1 trong tổng số 1 trang]

Permissions in this forum:
Bạn không có quyền trả lời bài viết

 

Legend :  [ Vn-plus Founder ] [ Administrator ] [ Super Moderator ] [ Moderator ] [ Member ] [ VIP member ] [ banned ]



Free Auto Backlink Exchange ServiceFree Backlink Exchange For SeoVietnam BacklinksTravel BacklinksFree BacklinksText Backlink ExchangesText Back Link ExchangeFlorists LinksOverShopping Link ExchangeFree Automatic LinkWeb Link Exchange - Linkcsere

    Diễn Đàn Vn-Plus.Org | Thống kê | Liên hệ | Báo cáo lạm dụng  | Bạn muốn quảng cáo | Lên Đầu Trang

    Powered by: PHPBB2. Copyright © 2011  Diễn Đàn Mở VN+
    Contact: Vn-plus Founder . Yahoo: Nobita_xuka_ccy. Địa chỉ: Từ Tây - Yên Phú - Yên Mỹ - Hưng Yên
    BQT không chịu trách nhiệm bất cứ nội dung nào của thành viên đăng tải

Liên Kết Vớivn+

Free forum | ©phpBB | Free forum support | Báo cáo lạm dụng | Thảo luận mới nhất