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]

Trunks-Kun

Trunks-Kun
Administrator
Administrator
1. Đặt Vấn Đề

- Khi đã hiểu được Biến Chương Trình là gì rồi thì khái niệm cần nắm tiếp theo là Hàm, hay còn gọi là Chương Trình Con như trong Pascal. Vậy Hàm là gì? Tại sao phải cần có Hàm? Để trả lời 2 câu hỏi trên ta nhìn lại ví dụ cuối cùng trong bài Cấu Trúc Lặp:

Code:
    $end=9 ;Giá trị giới hạn
    $step=2 ;Số đơn vị sẽ tăng
   
    ;~ Tăng dần
    For $start=1 To $end Step $step
        MsgBox(0,"Step: "&$step,"Start: "&$start&" to: "&$end)
    Next
   
    ;~ Giảm dần
    For $start=43 To $end Step $step-9
        MsgBox(0,"Step: "&$step-9,"Start: "&$start&" to: "&$end)
    Next

- Trong ví dụ này ta có 2 vòng lặp For thực hiện việc xuất ra 1 bản thông báo, đây là một công việc đơn giản chỉ với một câu lệnh, nhưng hãy tưởng tượng ta có một công việc với hàng trăm câu lệnh thì sao, chưa hết nếu không chỉ có 2 vòng lặp For mà ta cần đến hàng chục cái thì sao.
- Nếu bạn nói Copy Paste là xong thì đây là câu trả lời rất hay vì không có giải pháp nào tệ hơn thế nữa. Vậy đâu là giải pháp tốt nhất, đương nhiên giải pháp tốt nhất là dùng Hàm. Với nó bạn có thể thực hiện công việc của hàng trăm câu lệnh, hàng chục vòng lặp và cấu trúc khác nhau chỉ với vài dòng lệnh. Trước khi có thể làm được chuyện khó tin này, tụi mình cần đi tìm hiểu về cấu trúc của Hàm đã.


2. Khái Niệm về Hàm

Xét về kiểu dáng thì Hàm được xem là một dạng cấu trúc, nó cũng có từ khóa kết thúc của riêng mình là EndFunc, nhưng hơn những cấu trúc If, While, For,... là tên của Hàm do Lập Trình Viên đặt cho nó. Ví dụ:

Code:
    Func Hello($value, $value2, $value3)
        $value = $value + $value2  ;Các lệnh của Hàm
        $value = $value * $value3  ;...
        Return $value      ;Trả dữ liệu về thông qua Biến
    EndFunc


- Trong ví dụ trên từ khóa Func và EndFunc dùng để đánh dấu vùng lãnh thổ của một Hàm, tất cả những câu lệnh bên trong vùng lãnh thổ này chỉ phục vụ cho chính Hàm đó mà thôi và muốn bao nhiêu câu lệnh trong vùng lãnh thổ này cũng được.
- Chữ “Hello” là Tên của Hàm, nó sẽ được Lập Trình Viên dùng để gọi Hàm ra khi cần. Cách đặt tên cũng tương tự như đặt tên cho Biến, chỉ khác ở chỗ không cần dấu $ và không được bắt đầu bằng số (0-9).
- Trong ngoặc đơn ( ) là các biến mà Hàm đó sẽ dùng, để hiểu vai trò của chúng tụi mình sẽ nâng cấp ví dụ ở trên, mục đích là đưa vòng lặp cho Hàm quản lý, như thế khi Lập Trình Viên cần thực thi vòng lặp chỉ cần dùng lệnh gọi Hàm ra mà thôi:

Code:
    $end=9 ;Giá trị giới hạn
    $step=2 ;Số đơn vị sẽ tăng
   
    ;~ Tăng dần
    ThongBao(1, $end, $step) ;Lệnh gọi hàm
   
    ;~ Giảm dần
    ThongBao(43, $end, -7)  ;Lệnh gọi hàm
   
    ;~ Hàm xuất thông báo
    Func ThongBao($start, $end, $step)
        For $i = $start To $end Step $step ;~ Dùng biến $i làm biến đếm
            MsgBox(0," | Step: "&$step,"Start: "&$i&" to: "&$end)
        Next 
    EndFunc

- Ở ví dụ mới này tụi mình đã tạo ra một hàm có tên là “ThongBao”, trong lãnh thổ của nó là vòng lặp tương tự như ví dụ củ. Giờ hãy nhìn lên lệnh gọi Hàm ở dòng chú thích “Tăng dần” 4 giá trị được truyền lần lượt là:
+ 1 sẽ được gán cho biến $start của Hàm.
+ $end sẽ được gán cho biến $end của Hàm.
+ $step sẽ được gán cho biến $step của Hàm.
- Một điểm cần lưu ý rằng biến $end và $step ở lệnh Gọi Hàm cạnh dòng chú thích "Tăng Dần" không phải là biến $end và $step ở cạnh Tên Hàm, mặc dù chúng có tên hoàn toàn giống nhau vì như đã nói các lệnh (kể cả Biến) bên trong Hàm chỉ phục vụ cho chính hàm đó, không hề liên quan gì đến bên ngoài lãnh thổ cả.
- Giờ xét tới lệnh gọi hàm ở dòng chú thích "Giảm Dần", cấu trúc lệnh gọi không có gì thay đổi chỉ có giá trị truyền vào là khác. Chính điều này sẽ làm cho kết quả thực thi của Hàm cũng khác theo, mặc dù cấu trúc hàm không hề thay đổi trong 2 lần gọi. Có thể nói các biến truyền vào đã quyết định kết quả xuất ra của Hàm và đây cũng là vai trò chính của chúng.

- Vậy túm lại Hàm là gì? => Chúng là những nhóm câu lệnh được kết hợp lại với nhau và được đặt cho 1 cái tên, nhằm thực hiện một công việc gì đó. Cũng giống như việc người ta lấy nhiều Linh Kiện khác nhau ráp lại thành một chiếc xe với mục đích là chở hàng, khi đó người ta đặt tên cho nó là "Xe Tải" hoặc "Xe Chở Hàng" tùy theo ý thích của người tạo ra nó. Ngoài chức năng để gọi Hàm ra, Tên Hàm còn giúp người xem hiểu được chức năng bên trong Hàm, vì không ai tạo ra "Xe Tải" nhưng lại đặt tên cho nó là "Máy Ủi" cả, nếu có thật chắc... =P~

- Nhưng Tại sao phải cần có Hàm? => Nếu ví dụ trên không đủ để cho bạn nhận ra được lý do này thì hãy tưởng tượng rằng các Câu Lệnh là những Linh Kiện của một chiếc xe, khi cần thực hiện việc Chở Hàng chúng ra ráp các linh kiện lại. Vậy không lẽ mỗi lần chở hàng chúng ta lại phải đi Ráp Linh Kiện lại với nhau thành một chiếc xe mới, đương nhiên là ráp sẵn để đó khi cần thì lấy ra xài thôi. Hàm cũng là một sự kết hợp sẵn có của những câu lệnh.

- Nếu chưa hiểu được 2 câu hỏi trên thì bạn nên quay lại xem thêm 1 tý nữa đi nhé, vì phần tiếp theo sẽ mở rộng cách dùng Hàm ra thêm.

3. Kết Quả Thực Thi và Những Biến Không Cần Thiết
a. Từ Khóa Return
(Bài viết được đăng trên 72ls.net, mong đọc giả vào xem ủng hộ Ban Biên Tập viết tiếp cho cộng đồng)
- Lại nói về chuyện xe tải, trong thực tế khi chở hàng xong bác tài phải quay về báo cáo kết quả chuyến đi cho người chủ. Và Hàm cũng hoạt động theo kiểu đó, khi thực hiện xong nhiệm vụ của mình nó thường phải báo cáo lại kết quả thực thi của các câu lệnh bên trong.

- Cũng với ví dụ về hàm ThongBao ở trên, tụi mình sẽ sữa lại để nó có thể đếm số lần thông báo hiện ra và dùng từ khóa Return trả kết quả đếm đó về sau mỗi lần gọi hàm. Trong ví dụ bên dưới tớ đã cố tình đặt cho 2 biến đếm ở trong và ngoài hàm ThongBao có tên giống nhau để 1 lần nữa nhấn mạnh rằng các biến bên trong Hàm không liên quan gì đến các biến bên ngoài Hàm.

Code:
    $end=9 ;Giá trị giới hạn
    $step=2 ;Số đơn vị sẽ tăng
   
    ;~ Tăng dần
    $Dem = ThongBao(1, $end, $step) ;Lệnh gọi hàm
    tooltip("Xuất: "&$Dem&" lần", 0, 0 )
   
    ;~ Giảm dần
    $Dem = ThongBao(52, $end, -7)  ;Lệnh gọi hàm
    tooltip("Xuất: "&$Dem&" lần", 0, 0 )
   
    Sleep(2700)    ;Đợi khoãn 2 giây để thấy ToolTip
   
    ;~ Hàm xuất thông báo
    Func ThongBao($start, $end, $step)
        $Dem = 0    ;Biến để đếm số lần xuất thông báo
     
        For $i=$start To $end Step $step ;~ Dùng biến $i làm biến đếm
            MsgBox(0,"Step: "&$step,"Start: "&$i&" to: "&$end)
            $Dem+=1 ;Tăng biến đếm lên 1
        Next 
     
        Return $Dem ;Báo cáo kết quả đếm
    EndFunc

- Do ở 2 lần gọi hàm các giá trị được truyền vào khác nhau, nên số lần thông báo xuất hiện bên trong hàm cũng khác nhau, dẫn đến khi trả (Return) biến Đếm cũng khác nhau nốt, đó là chưa kể đến sự khác nhau của 2 ToolTip. Nhân nói về sự khác nhau của các Giá Trị mà biến truyền vào cho Hàm, tớ nói luôn về trường hợp những giá trị giống nhau được truyền vào.

b. Biến Không Cần Thiết (Option)
- Qua 2 lần gọi hàm trong ví dụ trên cũng như trong các ví dụ trước, chúng ta có thể thấy rằng giá trị của biến $end lúc nào cũng bằng 9 và nếu nó còn cố định thế này trong nhiều lần gọi khác thì tụi mình nên chuyển nó thành Biến Không Cần Thiết để khỏi phải truyền giá trị vào cho nó mỗi khi gọi Hàm. Và đây là cách làm:

Code:
    ;$end=9 không cần tạo biến
    $step=2 ;Số đơn vị sẽ tăng
   
    ;~ Tăng dần
    $Dem = ThongBao(1, $step) ;Lệnh gọi hàm được rút gọn
    tooltip("Xuất: "&$Dem&" lần", 0, 0 )
   
    ;~ Giảm dần
    $Dem = ThongBao(52, -7)  ;Lệnh gọi hàm được rút gọn
    tooltip("Xuất: "&$Dem&" lần", 0, 0 )
   
    Sleep(2700)    ;Đợi khoãn 2 giây để thấy ToolTip
   
    ;~ Hàm xuất thông báo
    Func ThongBao($start, $step, $end = 9)  ;Gán giá trị cố định cho biến $end
        $Dem = 0    ;Biến để đếm số lần xuất thông báo
     
        For $i=$start To $end Step $step ;~ Dùng biến $i làm biến đếm
            MsgBox(0,"Step: "&$step,"Start: "&$i&" to: "&$end)
            $Dem+=1 ;Tăng biến đếm lên 1
        Next 
     
        Return $Dem ;Báo cáo kết quả đếm
    EndFunc

=> Đầu tiên là thay đổi vị trí của $end, vì tất cả biến Option đều phải được dồn về hết bên phải.
=> Sau đó gán giá trị cố định cho nó, như thế các lệnh gọi hàm sẽ không cần truyền gì vào cho biến $end.
=> Trong trường hợp muốn $end mang giá trị khác thì tụi mình cứ truyền vào, nó sẽ lấy giá trị mới ra dùng.

4. Phân Loại Hàm

- Như đã biết Hàm là một nhóm những câu lệnh được ráp lại với nhau từ trước để khi cần thì gọi ra dùng, vậy AutoIT có ráp sẵn hàm cho chúng ta không? Câu trả không phải là có mà là có rất nhiều và đây cũng chính là mục đích ra đời của AutoIT, những hàm ráp sẵn của AutoIT có thể được chia làm 2 loại: Hàm Mặc Định và Hàm Do Người Dùng Định Nghĩa

+ Hàm Mặc Định: loại này chúng ta đã gặp ở những bài trước rồi, cụ thể là các hàm như: MsgBox(), InputBox() và rất nhiều hàm khác. Chúng đảm nhận rất nhiều loại công việc khác nhau từ việc xử lý File đến việc tạo ra Giao Diện và hầu hết đều rất dễ dùng. Người ráp những hàm này không ai khác chính là đội ngũ sáng lập ra AutoIT.

Code:
    MsgBox(0,"72ls.NET","AutoIT Forum")    ;Xuất Thông Báo
    InputBox("72ls.NET","AutoIT Forum") ;Nhập Dữ Liệu
    FileCopy("C:/72ls.NET","D:/72ls.NET")  ;Sao Chép File
    Random($Min, $Max)  ;Lấy bất kỳ 1 số giữa Min và Max
    Mod(7,2)        ;Tính số dư của 7/2

+ Hàm Do Người Dùng Định Nghĩa: còn gọi tắc là UDF (User Defined Function) tức là do những Lập Trình Viên không thuộc đội ngũ sáng lập AutoIT tạo ra. Loại hàm UDF này còn được chia thành 2 nhóm nhỏ khác, một nhóm là những hàm được đội ngũ sáng lập ra AutoIT chứng nhận chất lượng và đưa vào bộ cài đặt cũng như trong File Help, nhóm còn lại là những hàm được chia sẽ trên Internet. Tất cả chúng được tạo ra trong những file AU3 gọi là Thư Viện, cách dùng những Thư Viện này sẽ được giới thiệu trong 1 bài gần đây.

Code:
    _Max(25, 10)            ;Kiểm tra xem số nào lớn hơn
    _IsPressed($sHexKey)        ;Kiểm tra xem người dùng bấm nút nào
    _RunDos($command)      ;Thực hiện 1 lệnh trong MS Dos
    _ScreenCapture_Capture()    ;Chụp màn hình máy tính
    _SoundPlay($sound, 1)      ;Chơi một bản nhạc
    _StringReverse($s_String)  ;Đảo ngược chuỗi ký tự
    _IEBodyReadHTML ($oIE)      ;Lấy mã HTML của một Trang Web
    _SQLite_Exec ( $hDB, $sSQL) ;Thực hiện một câu truy vấn SQL
    _WordDocOpen ($o_object , $s_FilePath)  ;Mở một file Word

nguồn autoit.72ls.ne

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