[JX] Đề nghị viết script điều kiện IF dạng phẳng
Follow us on
Follow us on Facebook Follow us on Twitter Linked In Flickr Watch us on YouTube My Space Blogger
 
Trang 1 của 2 1 2 CuốiCuối
Kết quả 1 đến 10 của 11
  1. #1
    Thành Viên
    Ngày tham gia
    Jan 2012
    Bài viết
    142
    Thanks
    18
    Thanked 470 Times in 43 Posts

    Đề nghị viết script điều kiện IF dạng phẳng

    Khi mọi người viết script kiểm tra nhiều ràng buộc thì hay viết kiểu nhiều hàm IF lồng nhau. Cách viết này làm script phân thành nhiều cấp, code thụt hàng vào trong liên tục gây khó khăn khi đọc script.
    Bài này tui muốn đề nghị mọi người khi viết script dùng IF thì tránh viết lồng nhau mà hãy viết dạng phẳng để dễ đọc hơn. Tui xin minh họa như sau:

    Ví dụ: Viết script kiểm tra xem có đủ 3 viên Thủy tinh hay không trước khi cho phép tẩy tủy.

    Script IF dạng lồng nhau
    Code:
    01    function kiemtra()                
    02        if GetItemCount(17) >= 1 then            
    03            if GetItemCount(18) >= 1 then        
    04                if GetItemCount(19) >= 1 then    
    05                    DelItem(17)
    06                    DelItem(18)
    07                    DelItem(19)
    08                    taytuy()
    09                else    
    10                    Talk(1, "", "Không có Tử Thủy Tinh")
    11                end    
    12            else        
    13                Talk(1, "", "Không có Lục Thủy Tinh")    
    14            end        
    15        else            
    16            Talk(1, "", "Không có Lam Thủy Tinh")        
    17        end            
    18    end
    Script IF dạng phẳng
    Code:
    01    function kiemtra()        
    02        if GetItemCount(17) == 0 then    
    03            Talk(1, "", "Không có Lam Thủy Tinh")
    04            return
    05        end    
    06        if GetItemCount(18) == 0 then    
    07            Talk(1, "", "Không có Lục Thủy Tinh")
    08            return
    09        end    
    10        if GetItemCount(19) == 0 then    
    11            Talk(1, "", "Không có Tử Thủy Tinh")
    12            return
    13        end    
    14        DelItem(17)    
    15        DelItem(18)    
    16        DelItem(19)    
    17        taytuy()    
    18    end
    Xin cám ơn !
    Lần sửa cuối bởi invalidpw, ngày 30-01-13 lúc 04:18 AM.
    Khách viếng thăm hãy cùng invalidpw xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  2. The Following 8 Users Say Thank You to invalidpw For This Useful Post:

    Edward_Newgate (29-01-13), gj4cm0y3u3m (30-01-13), kid2058 (03-02-16), Linh_JX (29-01-13), lzlsky301 (29-01-13), nhoxmap_b7 (29-01-13), thaihoa91 (29-01-13), vipprolc (29-01-13)

  3. #2
    ♔YONKOU♔ Edward_Newgate's Avatar
    Ngày tham gia
    Nov 2010
    Bài viết
    2,773
    Thanks
    533
    Thanked 1,059 Times in 655 Posts

    Ðề: Đề nghị viết script điều kiện IF dạng phẳng

    Mình viết hầu như chả tab gì hoặc chỉ tab 1 lần thôi, miễn sao nhìn gọn mắt là được. Nhiều khi đọc script mà thụt tít vào trong mất công xóa khổ vãi.
    STRONGEST MAN

  4. #3
    Moderator vipbk's Avatar
    Ngày tham gia
    May 2012
    Đang ở
    đây
    Bài viết
    5,112
    Thanks
    248
    Thanked 3,008 Times in 1,889 Posts

    Ðề: Đề nghị viết script điều kiện IF dạng phẳng

    ở đây là check từng item thì nên làm theo cách dưới gọn hơn, còn với vòng lặp lồng thì phải dùng cách trên

    ví dụ:

    Code:
    for i=1,a do
    	for j=1,b do
    		for k=1,c do
    			...
    		end
    	end
    end
    Khách viếng thăm hãy cùng vipbk xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  5. Các thành viên gởi lời cảm ơn đến vipbk vì bài viết này !

    Linh_JX (29-01-13)

  6. #4
    Thành Viên
    Ngày tham gia
    Jan 2012
    Bài viết
    142
    Thanks
    18
    Thanked 470 Times in 43 Posts

    Ðề: Đề nghị viết script điều kiện IF dạng phẳng

    Trích dẫn Gửi bởi SystemError [Only registered and activated users can see links. ]
    1 số người viết a ma tơ, nhìn rối cả mắt
    Script trên sai cmnr
    Tại lồng nhau nhiều quá code nó cứ thụt ra thụt vào, code dài đọc một hồi không biết đang trong chỗ nào. Tốt nhất là viết phẳng như trên để khỏi thụt vào.
    Script trên chạy đúng nhé, return sẽ thoát hẳn ra khỏi function luôn nên mỗi điều kiện IF là độc lập nhưng nối tiếp nhau, vì vậy dùng END chứ không dùng ELSEIF, để nhìn cho nó độc lập (à có cái dấu >= bị gõ nhầm, đã sửa lại)
    Khách viếng thăm hãy cùng invalidpw xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  7. #5
    Thành Viên
    Ngày tham gia
    Jul 2011
    Bài viết
    522
    Thanks
    269
    Thanked 308 Times in 196 Posts

    Ðề: Đề nghị viết script điều kiện IF dạng phẳng

    cái này tùy ng thôi, có ng thích kiểu này, có ng thích kiểu kia, còn tùy vào trình nữa, đâu phải ai cũng là pro để viết bằng cách tối ưu nhất, gọn gàng nhất đâu
    Khách viếng thăm hãy cùng greentears xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  8. #6
    Thành Viên
    Ngày tham gia
    Dec 2012
    Bài viết
    428
    Thanks
    9
    Thanked 123 Times in 84 Posts

    Ðề: Đề nghị viết script điều kiện IF dạng phẳng

    01 function kiemtra()
    02 if GetItemCount(17) == 0 then
    03 Talk(1, "", "Không có Lam Thủy Tinh")
    04 return
    05 end
    06 if GetItemCount(18) == 0 then
    07 Talk(1, "", "Không có Lục Thủy Tinh")
    08 return
    09 end
    10 if GetItemCount(19) == 0 then
    11 Talk(1, "", "Không có Tử Thủy Tinh")
    12 return
    13 end
    14 DelItem(17)
    15 DelItem(18)
    16 DelItem(19)
    17 taytuy()
    18 end

    ở đó là 1 mới đúng chứ
    Khách viếng thăm hãy cùng Bi_Dep_Trai xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  9. #7
    ♔YONKOU♔ Edward_Newgate's Avatar
    Ngày tham gia
    Nov 2010
    Bài viết
    2,773
    Thanks
    533
    Thanked 1,059 Times in 655 Posts

    Ðề: Đề nghị viết script điều kiện IF dạng phẳng

    Trích dẫn Gửi bởi Bi_Dep_Trai [Only registered and activated users can see links. ]
    01 function kiemtra()
    02 if GetItemCount(17) == 0 then
    03 Talk(1, "", "Không có Lam Thủy Tinh")
    04 return
    05 end
    06 if GetItemCount(18) == 0 then
    07 Talk(1, "", "Không có Lục Thủy Tinh")
    08 return
    09 end
    10 if GetItemCount(19) == 0 then
    11 Talk(1, "", "Không có Tử Thủy Tinh")
    12 return
    13 end
    14 DelItem(17)
    15 DelItem(18)
    16 DelItem(19)
    17 taytuy()
    18 end

    ở đó là 1 mới đúng chứ
    = 1 mà lại bảo là không có thủy tinh à =.=!
    Đọc lại script đi chứ
    STRONGEST MAN

  10. #8
    Thành Viên
    Ngày tham gia
    Aug 2012
    Bài viết
    49
    Thanks
    11
    Thanked 2 Times in 2 Posts

    Ðề: Đề nghị viết script điều kiện IF dạng phẳng

    viết script là phải có tab như vậy mới đảm bảo đúng nguyên tắc , nó giúp người đọc dễ hiễu hơn và khi muốn chỉnh sữa thì chỉnh sữa cũng dễ hơn , tránh trường hợp sai A mà sữa cả A và B cho dù A và B không liên quan nhau
    Khách viếng thăm hãy cùng loianhhua003 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  11. #9
    Thành Viên
    Ngày tham gia
    Apr 2014
    Bài viết
    20
    Thanks
    7
    Thanked 9 Times in 8 Posts

    Ðề: Đề nghị viết script điều kiện IF dạng phẳng

    Đào mộ, là 1 coder thì bạn nên tách những phần của 1 cấu trúc lệnh = 1 dấu tab, không mất mát gì, để còn dùng trong những lúc sửa lỗi, rồi người khác đọc. Chứ coding gì mà nhìn cứ đầu hàng táng, đọc chả biết kết thúc của cái IF đó ở chỗ nào nữa @@ -> mất cảm tình

    Thứ 2 nữa là nếu các bạn học lập trình các bạn sẽ hiểu tiến trình xử lý code của máy, nếu mà là 1 dạng lồng thì máy tính sẽ phải xử lý nhiều hơn dẫn đến tình trang lag (server online) và nữa là nhìn rất rối mắt. Cho nên nếu có thể đưa về dạng đơn giản nhất thì nên đưa, nó có rất nhiều lợi ích.

    Thứ 3 là không phải cứ có ý tưởng là viết ra cái đoạn code tràng giang đại hải, nhiều khi thừa, nếu có thể hãy tìm cách tối ưu code tốt nhất. Đó là kinh nghiệm khi làm code bất cứ game hay phần mềm nào của mình, nếu bản thân hoặc người khác đọc sẽ cảm thấy rất dễ hiểu, ngắn gọn, xúc tích và tối ưu

    Ví dụ: bạn so sánh 2 đoạn code dưới đây xem cái nào tối ưu và dễ hiểu hơn
    Code 1:
    PHP Code:
    function addSkill90(nMp)
        
    local Tab_KyNang90 = {
            {
    "ThiÕu L©m",21,23,24},
            {
    "Thiªn V­¬ng",51,54,56},
            {
    "§­êng M«n",78,80,82},
            {
    "Ngò §éc",103,105,107},
            {
    "Nga My",127,130,132},
            {
    "Thóy Yªn",148,150},
            {
    "C¸i Bang",165,168},
            {
    "Thiªn NhÉn",185,186,188},
            {
    "Vâ §ang",202,203},
            {
    "C«n L«n",224,226,228}
            }
        if 
    nMp and nMp 11 then
            nSk 
    getn(Tab_KyNang90[nMp])
            if 
    nSk == 3 then
                AddMagic
    (Tab_KyNang90[nMp][2],20)
                
    AddMagic(Tab_KyNang90[nMp][3],20)
                
    Msg2Player("B¹n häc ®­îc kü n¨ng 90 <color=green>"..Tab_KyNang90[nMp][1].."<color>")
            elseif 
    nSk == 4 then
                AddMagic
    (Tab_KyNang90[nMp][2],20)
                
    AddMagic(Tab_KyNang90[nMp][3],20)
                
    AddMagic(Tab_KyNang90[nMp][4],20)
                
    Msg2Player("B¹n häc ®­îc kü n¨ng 90 <color=green>"..Tab_KyNang90[nMp][1].."<color>")
            
    end
        end
    end 
    Code 2:
    PHP Code:
    function skill_90x(sel)
        
    local mp tenmonphai(sel)
        if 
    mp == "Thieu Lam Phai" then
            AddMagic
    (21,20)
            
    AddMagic(23,20)
            
    AddMagic(24,20)
            
    Talk(1,"no","Chóc mõng b¹n ®· häc ®­îc tuyÖt kü 90 cña  "..mp)
        elseif 
    mp == "Thien Vuong Bang" then
            AddMagic
    (51,20)
            
    AddMagic(54,20)
            
    AddMagic(56,20)
            
    Talk(1,"no","Chóc mõng b¹n ®· häc ®­îc tuyÖt kü 90 cña  "..mp)
        elseif 
    mp == "Duong Mon" then
            AddMagic
    (78,20)
            
    AddMagic(80,20)
            
    AddMagic(82,20)
            
    AddMagic(83,20)
            
    Talk(1,"no","Chóc mõng b¹n ®· häc ®­îc tuyÖt kü 90 cña  "..mp)
        elseif 
    mp == "Ngu Doc Giao" then
            AddMagic
    (103,20)
            
    AddMagic(105,20)
            
    AddMagic(107,20)
            
    Talk(1,"no","Chóc mõng b¹n ®· häc ®­îc tuyÖt kü 90 cña  "..mp)
        elseif 
    mp == "Nga My Phai" then
            AddMagic
    (127,20)
            
    AddMagic(130,20)
            
    AddMagic(132,20)
            
    Talk(1,"no","Chóc mõng b¹n ®· häc ®­îc tuyÖt kü 90 cña  "..mp)
        elseif 
    mp == "Thuy Yen Mon" then
            AddMagic
    (148,20)
            
    AddMagic(150,20)
            
    Talk(1,"no","Chóc mõng b¹n ®· häc ®­îc tuyÖt kü 90 cña  "..mp)
        elseif 
    mp == "Cai Bang" then
            AddMagic
    (165,20)
            
    AddMagic(168,20)
            
    Talk(1,"no","Chóc mõng b¹n ®· häc ®­îc tuyÖt kü 90 cña  "..mp)
        elseif 
    mp == "Thien Nhan Giao" then
            AddMagic
    (185,20)
            
    AddMagic(186,20)
            
    AddMagic(188,20)
            
    Talk(1,"no","Chóc mõng b¹n ®· häc ®­îc tuyÖt kü 90 cña  "..mp)
        elseif 
    mp == "Vo Dang Phai" then
            AddMagic
    (202,20)
            
    AddMagic(203,20)
            
    Talk(1,"no","Chóc mõng b¹n ®· häc ®­îc tuyÖt kü 90 cña  "..mp)
        elseif 
    mp == "Con Lon Phai" then
            AddMagic
    (224,20)
            
    AddMagic(226,20)
            
    AddMagic(228,20)
            
    Talk(1,"no","Chóc mõng b¹n ®· häc ®­îc tuyÖt kü 90 cña  "..mp)
        
    end
    end 
    Cùng là đoạn code học skill 90 của các môn phái, nhưng nhìn vào là biết cái nào tối ưu hơn rồi.
    Đó là lý do mà script của các bạn có khi lên tới cả 1000 dòng, trong khi tối ưu có thể giảm xuống rất nhiều các đoạn code bị lặp.

    Thực ra đoạn Code 1 còn có thể tối ưu hơn nữa nếu thay đoạn IF:
    PHP Code:
        if nMp and nMp 11 then
            nSk 
    getn(Tab_KyNang90[nMp])
            if 
    nSk == 3 then
                AddMagic
    (Tab_KyNang90[nMp][2],20)
                
    AddMagic(Tab_KyNang90[nMp][3],20)
                
    Msg2Player("B¹n häc ®­îc kü n¨ng 90 <color=green>"..Tab_KyNang90[nMp][1].."<color>")
            elseif 
    nSk == 4 then
                AddMagic
    (Tab_KyNang90[nMp][2],20)
                
    AddMagic(Tab_KyNang90[nMp][3],20)
                
    AddMagic(Tab_KyNang90[nMp][4],20)
                
    Msg2Player("B¹n häc ®­îc kü n¨ng 90 <color=green>"..Tab_KyNang90[nMp][1].."<color>")
            
    end
        end 
    Bằng đoạn này:
    PHP Code:
        if nMp and nMp 11 then
            nSk 
    getn(Tab_KyNang90[nMp])
            for 
    i=2,nSk do
                
    AddMagic(Tab_KyNang90[nMp][i],20)
            
    end
            Msg2Player
    ("B¹n häc ®­îc kü n¨ng 90 <color=green>"..Tab_KyNang90[nMp][1].."<color>")    
        
    end 
    Lần sửa cuối bởi Romeo8x, ngày 09-10-15 lúc 05:57 AM.
    Khách viếng thăm hãy cùng Romeo8x xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  12. Các thành viên gởi lời cảm ơn đến Romeo8x vì bài viết này !

    danghai1993 (01-09-21)

  13. #10
    Thành Viên
    Ngày tham gia
    Jan 2013
    Bài viết
    44
    Thanks
    19
    Thanked 22 Times in 8 Posts

    Ðề: Đề nghị viết script điều kiện IF dạng phẳng

    Trích dẫn Gửi bởi invalidpw [Only registered and activated users can see links. ]
    Khi mọi người viết script kiểm tra nhiều ràng buộc thì hay viết kiểu nhiều hàm IF lồng nhau. Cách viết này làm script phân thành nhiều cấp, code thụt hàng vào trong liên tục gây khó khăn khi đọc script.
    Bài này tui muốn đề nghị mọi người khi viết script dùng IF thì tránh viết lồng nhau mà hãy viết dạng phẳng để dễ đọc hơn. Tui xin minh họa như sau:

    Ví dụ: Viết script kiểm tra xem có đủ 3 viên Thủy tinh hay không trước khi cho phép tẩy tủy.

    Script IF dạng lồng nhau
    Code:
    01    function kiemtra()                
    02        if GetItemCount(17) >= 1 then            
    03            if GetItemCount(18) >= 1 then        
    04                if GetItemCount(19) >= 1 then    
    05                    DelItem(17)
    06                    DelItem(18)
    07                    DelItem(19)
    08                    taytuy()
    09                else    
    10                    Talk(1, "", "Không có Tử Thủy Tinh")
    11                end    
    12            else        
    13                Talk(1, "", "Không có Lục Thủy Tinh")    
    14            end        
    15        else            
    16            Talk(1, "", "Không có Lam Thủy Tinh")        
    17        end            
    18    end
    Script IF dạng phẳng
    Code:
    01    function kiemtra()        
    02        if GetItemCount(17) == 0 then    
    03            Talk(1, "", "Không có Lam Thủy Tinh")
    04            return
    05        end    
    06        if GetItemCount(18) == 0 then    
    07            Talk(1, "", "Không có Lục Thủy Tinh")
    08            return
    09        end    
    10        if GetItemCount(19) == 0 then    
    11            Talk(1, "", "Không có Tử Thủy Tinh")
    12            return
    13        end    
    14        DelItem(17)    
    15        DelItem(18)    
    16        DelItem(19)    
    17        taytuy()    
    18    end
    Xin cám ơn !
    Người viết script chỉ cần họ dễ nhìn là được, đâu nhất thiết người đọc phải dễ đọc đâu. Người làm thì bỏ công sức ra để làm, người dùng thì mỗi người 1 ý, giả sử mai kia có người đề nghị viết IF lồng nhau cho dễ nhìn thì sao? Hãy cố gắng hiểu người viết muốn làm gì, chứ đừng đòi hỏi họ phải làm gì, trừ khi là đặt hàng họ làm theo ý!
    Khách viếng thăm hãy cùng dungtnut xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

 

 
Trang 1 của 2 1 2 CuốiCuối

Các Chủ đề tương tự

  1. [MU] Có sư phụ hay đại ca nào cho mình bái sư học nghề không ạ?
    Bởi hanh_ktw trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 3
    Bài viết cuối: 05-09-12, 10:32 AM
  2. Chép phạt thời công nghệ thông tin (IT) Hài :))
    Bởi thaihoa91 trong diễn đàn CLB Gallery - Wallpapers
    Trả lời: 2
    Bài viết cuối: 02-12-10, 07:22 AM
  3. Hội nghị bàn tròn
    Bởi muonline3k trong diễn đàn Development
    Trả lời: 6
    Bài viết cuối: 09-10-08, 02:47 PM
  4. Đề nghị xóa bài Mu 1.00.16 Pro VTM
    Bởi ymatto21 trong diễn đàn Releases
    Trả lời: 5
    Bài viết cuối: 28-03-08, 08:52 PM

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  
Múi giờ GMT +7. Bây giờ là 11:12 PM.
vBulletin®, Copyright ©2000-2011, Jelsoft Enterprises Ltd.
CLBGamesVN không chịu trách nhiệm về Luật Bản Quyền của các tài liệu, bài viết v.v...được đăng tải trên diễn đàn này.
Diễn đàn phát triển dưới sự đóng góp của tất cả thành viên. BQT chỉ là những người thành lập ra sân chơi, quản lý và duy trì về mặt kỹ thuật, nội dung khi hợp lệ.