[AMX] Coding Style

Thảo luận trong 'Counter Strike' bắt đầu bởi sontung0, 3/8/11.

  1. sontung0

    sontung0 Dragon Quest

    Tham gia ngày:
    27/5/09
    Bài viết:
    1,333
    Sếp để Topic sống vài ngày rồi chuyển vào Topic [AMX] Tổng hợp Code, Plug do Mem chế hoặc giới thiệu cũng được ^^


    Coding Style

    Mở đầu
    Đú theo phong trào hoc amx, hôm nay tí tởn post 1 bài hướng dẫn nhỏ nhỏ :)
    Mình xin nói luôn là cái hướng dẫn này sẽ không giúp nâng cao trình độ AMX code của bạn đâu ;))

    + Vậy Coding Style nó là cái gì?
    - Coding Style hiểu tàm tạm là Phong cách viết code, nghĩa là viết code theo một quy tắc nào đó.
    + Hic.Học code đã bao thứ, giờ lại thêm cả cái gọi là phong cách viết code, viết code mà cũng phải có phong cách cơ à (ăn chơi nhỉ =)))
    - Đúng là mới đầu nghe thì cũng có vẻ hơi thừa.Nhưng khi bạn tìm hiểu thì sẽ thấy nó thực sự là có ích.Coding Style được áp dụng hầu hết cho các ngôn ngữ lập trình.vì vậy bỏ ra 1 time tìm hiểu về nó cũng không phải là phí phạm ;)
    Giờ đi vào chủ đề chính nào \:D/


    The Opening Comment Block
    Cái này tạm hiểu là lời giới thiệu về plugin.Nếu để ý thì các bạn sẽ thấy ở ngay đầu của 1 plugin thì thường có 1 đống comment.Nó có cấu trúc như này
    [spoil]
    PHP:
    /*

    Copyleft 2011
    Plugin thread: http://forum.gamevn.com/forumdisplay.php?75-Counter-Strike

    Tên Plugin
    ========

    Description
    Đây là nới viết những thông tin chung về plugin
    ...

    Commands
    Những command sử dụng trong plugin và tác dụng của chúng
    VD:
    say /give_weapon - give weapon to player
    ....

    Credits
    Tên những người thực hiện plugin
    VD:
    sontung0 - Author
    sontung0 - Testing help
    ^^

    Changelog:
    Những cập nhật mới cũng như lỗi bug đã sửa
        Jun 1, 2008 - v1.0 -    Initial release
        Jun 2, 2008 - v1.1 -    [FIXED] Some repeated variables
                    [FIXED] Message printing incorrectly
                    duelists <-> players
                    [ADDED] God mode to normal players

    */  
    [/spoil]
    Và nhiệm vụ của nó là giúp cho người khác khi muốn tim hiểu plugin của bạn thì chỉ cần đọc mục này là sẽ hiểu được


    Variables Name
    Cái này tạm hiểu là cách đặt tên biến
    Cách đặt tên biến thì nên thêm kí tự đại diện cho loại cũng như tính chất của biến vào đầu biến.Đối với tên biến gồm nhiều từ thì chữ cái đầu nên viết hoa

    Global Variables (Biến toàn cục - tức là các biến sử dụng ở mọi vị trí)
    Thêm kí tự g_ hc g vào đầu
    PHP:
    new gMyVariable
    new g_MyOtherVariable 
    Tương tự với dạng khác
    • i - integers/cells
    • f hoặc fl - floats
    • s hoặc st - strings
    • b - bools
    • v - vectors
    PHP:
    // a global cell
    new g_iKills

    // a global float
    new Float:g_flSpeed

    // a string
    new sMyString[]

    // a bool
    new bool:bFlag

    // a vectors
    new vMyVector[3]
    Nào bây giờ xem thử tác dụng của em nó xem ntn
    VD khi bạn nhìn thấy 1 biến là g_iData.Theo những gì bên trên thì biến này sẽ là biến toàn cục (g_) và nó có dạng integer (i), đỡ phải tìm nơi khai báo biến và biết luôn dạng của biến, cũng đại tiện đúng không ;))

    Use Constants
    Đối với những hằng số thì bạn nên viết hoa tên biến
    PHP:
    #define MAX_ITEMS 10
    Không nên viết như này
    PHP:
    #define max_items 10

    Functions Name
    Tương tự như Variables Name, Functions Name là cách đặt tên cho các function

    Public Function (function mà mình đăng kí cho các event, logevent, forward, HamForward, ...)
    Cách đặt tên là: <Loại>_<Tên> hc <Loại><Tên>
    PHP:
    register_event"HLTV""EventHLTV""a""1=0""2=0" // EventHLTV
    register_logevent"LogEventRoundEnd"2"1=Round_End" // LogEventRoundEnd
    register_forwardFM_PlayerPostThink"ForwardPlayerPostThink" // ForwardPlayerPostThink
    register_clcmd"primammo""CmdPrimAmmo" // CmdPrimAmmo
    RegisterHamHam_Spawn"player""HamSpawn"// HamSpawn
    hoặc
    PHP:
    register_event"HLTV""Event_HLTV""a""1=0""2=0" // Event_HLTV
    register_logevent"LogEvent_RoundEnd"2"1=Round_End" // LogEvent_RoundEnd
    register_forwardFM_PlayerPostThink"Forward_PlayerPostThink" // Forward_PlayerPostThink
    register_clcmd"primammo""Cmd_PrimAmmo" // Cmd_PrimAmmo
    RegisterHamHam_Spawn"player""Ham_Spawn"// Ham_Spawn
    (cá nhân mình thì thích cách 2 hơn ;;))

    Stock Function, Function (chính là các function mà mình tạo)
    Cách đặt tên là: <công_dụng>_<Tên> hc <công_dụng><Tên>

    Đối với hàm lấy giá trị thì tiếp đầu ngữ là get
    Đối với hàm lấy giá trị mà giá trị trả về là Boolean thì tiếp đầu ngữ là:
    • is - nếu theo sau là tính từ
    • has - nếu sau là danh từ
    • can - nếu sau là động từ
    Đối với các hàm setter (hàm làm thay đổi giá trị của cái gì đó) thì tiếp đầu ngữ là set
    PHP:
    getUserName()
    isUserAlive()
    hasWeapon()
    canDropWeapon()
    setUserHealth()

    Indentation, Tabbing và Spacing
    Cái này nghĩa là sử dụng Tab, Spacing trong những câu lệnh để tạo các khoảng rõ ràng trong code
    Để hiểu rõ thì các bạn xem 2 VD sau:
    PHP:
    public some_function(id){
    new 
    szVariable[10]
    format(szVariable,9,"hello!!!!")
    if(
    id==0){
    server_print(szVariable)
    }else{
    client_print(id,print_chat,szVariable)
    }
    return 
    PLUGIN_HANDLED
    }
    PHP:
    public some_functionid )
    {
        new 
    szVariable[10];
        
    formatszVariable9"hello!!!!" );

        if ( 
    id == )
        {
            
    server_printszVariable );
        }
        else
        {
            
    client_printidprint_chatszVariable );
        }

        return 
    PLUGIN_HANDLED;
    }
    rõ ràng là với cách thứ 2 thì code khi nhìn vào sẽ dễ nhìn, dễ đọc và dễ chỉnh sửa hơn đúng không.
    Dưới đây là các cách viết code sử dụng Indentation, Tabbing và Spacing
    [spoil]
    PHP:
    // public function
    public FunctionNameparam1param2param3 )
    {
        
    // code here...
    }

    // function
    FunctionNameparam1param2param3 )
    {
        
    // code here...
    }

    // if else
    if ( iparam1 == || param2 || ( param3 param4 ) )
    {
        
    // code here...
    }
    else
    {
        
    // code here...
    }

    // for
    for ( new i100j++ )
    {
        
    // code here
    }

    // switch
    switch( variable )
    {
        case 
    0:
        {
            
    // code here
        
    }
        default:
        {
            
    // code here
        
    }
    }

    // while
    while( Function() )
    {
        
    // code here
    }

    // do while
    do
    {
        
    //this code will be executed at least once, and more until Function() returns false
    }
    while( Function() )

    // array
    new gCosts[MAX_WEAPONS] = 
    {
        
    2750,
        
    300,
        
    3000
    }
    new 
    gSounds[SOUNDS][] =
    {
        
    "items/suitchargeno1.wav",
        
    "cstactics/commander_attack.wav",
        
    "cstactics/commander_defend.wav"
    }

    // enum
    enum ORDERS
    {
        
    NONE,
        
    ATTACK,
        
    DEFEND,
        
    EQUIP
    }
    [/spoil]


    Commenting
    Cuối cùng là phần chú thích cho code (comment)
    Khi viết code thì các bạn đừng tiếc những dòng comment, comment mọi lúc mọi nơi nếu thấy cần thiết.
    Những dòng comment đó sẽ giúp ích rất nhiều khi bạn sửa code sau 1 time hoặc giúp những người khác hiểu code của bạn nhanh hơn

    Trước mỗi function hoặc biến thì nên có những comment ghi rõ tác dụng, tham số và giá trị trả về của nó
    PHP:
    /**
     * Returns a single cell of data from an array.  
     * Use this only with arrays that were created with a cellsize of 1!
     *
     * @param which        The array to retrieve the item from.
     * @param item            The item to retrieve (zero-based).
     * @return                The value of the cell.
     */
    native any:ArrayGetCell(Array:whichitem);

    Lời kết
    Viết code thì mỗi người một phong cách, một thói quen.Không thể gò bó tất cả mọi người viết code theo một cách nhất định được.
    Ngay cả mình cũng vậy, không phải khi viết code là mình làm theo tất cả những quy tắc trên
    Coding Style nhằm hướng cho Coder viết code theo một cách có hệ thống và có tổ chức
    Và mục đích cuối cùng là giúp cho code khi nhìn vào sẽ Dễ Đọc -> Dễ Hiểu -> Dễ Chỉnh Sửa

    Tài liệu:
    http://forums.alliedmods.net/showthread.php?t=6481
    http://forums.alliedmods.net/showthread.php?t=85274

    Trình độ có hạn, trong bài viết có gì thiếu hay sai sót thì mọi người cứ gạch thoải mái \:D/
    Giờ mới để ý đây là bài viết thứ 1000 của mình, đẹp ;))
     
    Chỉnh sửa cuối: 7/8/11
  2. MrKaii

    MrKaii The Warrior of Light

    Tham gia ngày:
    14/6/11
    Bài viết:
    2,208
    Nơi ở:
    Hà Nội
    Thật là tốt cho những ai muốn DEV codes :D
     
  3. Orpheus

    Orpheus ♥ ♡ ToMaTo TasTe Kiss ♡ ♥ Moderator

    Tham gia ngày:
    30/3/09
    Bài viết:
    4,066
    Nơi ở:
    Kingdom Hearts
    [​IMG]
    hay lắm!
    bảo kê topic này. anh em thảo luận, hạn chế những post có nội dung không liên quan nhé :D
     
  4. dias

    dias Mega Man

    Tham gia ngày:
    17/1/10
    Bài viết:
    3,226
    Nơi ở:
    SEOUL
    Cái này giúp mình trình bày code 1 cách dễ dàng, dễ hiểu hơn. Khá hay
     
  5. JackerLuuRower

    JackerLuuRower Donkey Kong

    Tham gia ngày:
    5/5/11
    Bài viết:
    344
    Mà chủ yếu là tự người viết đặt ra và theo ý họ thôi (nói cách khác, nếu họ ko muốn public thì việc đặt style của họ cũng cần 1 thời gian mới quen đc)
    những người mới bắt đầu viết nên đặt sao cho dễ hiểu (lỗi học coder âầu tiên của mình =.='). viết lộn xộn. giờ vào v1.3 đọc chưa chắc đã hiểu đc 1/3 những j mình đã từng viết 8-}
    ~> newbie cứ theo đó cho dễ đã. go pro rồi đặt sao chả đc >:)
     
  6. liveof9

    liveof9 Mr & Ms Pac-Man

    Tham gia ngày:
    23/5/11
    Bài viết:
    105
    :|
    đọc mà cũng chỉ hiểu dc 1/5 :|
    mà theo mọi người học code thì nên học gì trước nhỉ =-=!
     
  7. JackerLuuRower

    JackerLuuRower Donkey Kong

    Tham gia ngày:
    5/5/11
    Bài viết:
    344
    ^ Đọc manual \m/ và easy script
     
  8. teobrvt1995

    teobrvt1995 T.E.T.Я.I.S

    Tham gia ngày:
    19/9/10
    Bài viết:
    691
    dễ làm việc hơn với amxx :d, thanks cụ Tùng ạ. :D
     
  9. legiondark

    legiondark Donkey Kong

    Tham gia ngày:
    2/5/11
    Bài viết:
    357
    Nơi ở:
    Skynet !
    Hay lắm, nhưng mình còn một lưu ý là khi thụt đầu dòng k đúng (hay còn gọi là tabbing) thì complier nó sẽ warning luôn, chứ k phải là thế nào cũng đc (đang nói về amx complier :)))
    @Sếp: E nghĩ nên lấy topic này làm topic thảo luận về amx luôn cũng đc (Có thể đổi tên khác), còn topic kia chỉ để trưng bày plugin thôi :)) :D
     
    Chỉnh sửa cuối: 4/8/11
  10. lambien12345

    lambien12345 Mr & Ms Pac-Man

    Tham gia ngày:
    14/4/10
    Bài viết:
    268
    Nơi ở:
    De_Dustier
  11. My Own Way

    My Own Way S.V.E.N Commander Lão Làng GVN

    Tham gia ngày:
    30/7/09
    Bài viết:
    12,231
    Nơi ở:
    Hải Phòng
    Ở trên Off-topic của AM có 1 cái thread trò chơi thư giãn là : Đưa 1 đoạn code ra cho mọi người đoán coding style --> người viết code.. Qua cái coding style này cũng phần nào giúp nhận ra được kiểu viết code của 1 scripter nào đó....
    Viết code nhiều dần dần sẽ tự dưng hình thành kiểu style riêng thôi.
     
  12. legiondark

    legiondark Donkey Kong

    Tham gia ngày:
    2/5/11
    Bài viết:
    357
    Nơi ở:
    Skynet !
    AM nó chuyên về viết code r`, coder nó toàn chuyên nghiệp cả, đương nhiên sẽ có 1 style riêng. Còn 4rum mình chỉ toàn coder nghiệp dư(trừ 1 vài người giỏi) thì lấy đâu ra style riêng mà đoán. :))
     
  13. teobrvt1995

    teobrvt1995 T.E.T.Я.I.S

    Tham gia ngày:
    19/9/10
    Bài viết:
    691
    mình là hơn cả nghiệp dư =)), khỏi phải nói rồi =))
     
  14. legiondark

    legiondark Donkey Kong

    Tham gia ngày:
    2/5/11
    Bài viết:
    357
    Nơi ở:
    Skynet !
    Lại tự sướng =)) .
     
  15. My Own Way

    My Own Way S.V.E.N Commander Lão Làng GVN

    Tham gia ngày:
    30/7/09
    Bài viết:
    12,231
    Nơi ở:
    Hải Phòng
    Thì ta đã nói là cứ viết nhiều rồi sẽ hình thành style ^:)^.. Không phải cứ chuyên nghiệp thì mới có style ^:)^.
     
  16. legiondark

    legiondark Donkey Kong

    Tham gia ngày:
    2/5/11
    Bài viết:
    357
    Nơi ở:
    Skynet !
    Viết nhiều mà toàn viết vớ vẩn chưa chắc đã thành style đâu.
    Mà thôi, spam sếp lại chém, hỏi anh Tùng cái này:
    Mấy cái spr thế này thì anh làm sao đưa nó vào đúng vị trí đc nhỉ, theanh bảo k thể đặt tọa độ theo chiều ngang cho spr mà ??
    [​IMG]
     
  17. My Own Way

    My Own Way S.V.E.N Commander Lão Làng GVN

    Tham gia ngày:
    30/7/09
    Bài viết:
    12,231
    Nơi ở:
    Hải Phòng
    ^
    Cụ thể và ví dụ xem .... chưa hiểu ý :|
     
  18. rocxman800

    rocxman800 Dragon Quest

    Tham gia ngày:
    7/11/05
    Bài viết:
    1,215
    Nơi ở:
    trên Trển áh
    Lấy tọa độ từng cái thì bên Sprite có nói rồi, còn vị trí trên màn hình thì cố định luôn rồi. Có gì qua Sprite hỏi, ở đây dễ ăn thẻ :))
     
  19. My Own Way

    My Own Way S.V.E.N Commander Lão Làng GVN

    Tham gia ngày:
    30/7/09
    Bài viết:
    12,231
    Nơi ở:
    Hải Phòng
    Nếu là sprites và hud của CSO thì tìm ngay cái hud.txt nguyên của CSO có ghi sẵn cả 4 con số của các spr và hud trong ấy luôn :|
     
  20. legiondark

    legiondark Donkey Kong

    Tham gia ngày:
    2/5/11
    Bài viết:
    357
    Nơi ở:
    Skynet !
    Biết là thế r`, nhưng 4 con số ấy k cho biết đc vị trí spr trên màn hình đâu .
     

Chia sẻ trang này