Kết quả 1 đến 10 của 11
-
29-01-13, 04:14 PM #1
- 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
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
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é!
-
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)
-
29-01-13, 05:57 PM #2
Ðề: Đề 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
-
29-01-13, 06:04 PM #3
- 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é!
-
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)
-
30-01-13, 04:18 AM #4
- 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
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é!
-
30-01-13, 06:30 AM #5
- 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é!
-
30-01-13, 07:59 PM #6
- 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é!
-
31-01-13, 12:48 PM #7
-
01-02-13, 12:39 PM #8
- 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é!
-
09-10-15, 05:29 AM #9
- 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 > 0 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
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
Đó 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 > 0 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
PHP Code:if nMp > 0 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é!
-
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)
-
21-11-15, 09:29 PM #10
- 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
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é!
Các Chủ đề tương tự
-
[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ầuTrả lời: 3Bài viết cuối: 05-09-12, 10:32 AM -
Chép phạt thời công nghệ thông tin (IT) Hài :))
Bởi thaihoa91 trong diễn đàn CLB Gallery - WallpapersTrả lời: 2Bài viết cuối: 02-12-10, 07:22 AM -
Hội nghị bàn tròn
Bởi muonline3k trong diễn đàn DevelopmentTrả lời: 6Bài viết cuối: 09-10-08, 02:47 PM -
Đề nghị xóa bài Mu 1.00.16 Pro VTM
Bởi ymatto21 trong diễn đàn ReleasesTrả lời: 5Bài viết cuối: 28-03-08, 08:52 PM