Graal Forums  

Go Back   Graal Forums > Development Forums > NPC Scripting
FAQ Members List Calendar Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 03-30-2007, 12:48 AM
cbk1994 cbk1994 is offline
the fake one
cbk1994's Avatar
Join Date: Mar 2003
Location: San Francisco
Posts: 10,718
cbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond repute
Send a message via AIM to cbk1994
Post Clean Coding - Common Sense

Hello everyone. I'm Chris Zakuto, I script a ton in GS2. Whenever I go onto another server, I find the owners begging me to fix something, so I go in to fix it, and oh no! I see messy code, which happens to give me a headache.

I'll explain how to make code easier to read by yourself, and easier to read and edit by others aswell.

Part I -- Spaces
This is one of the simplest things to do, and it's very easy to get used to. Just add spaces! For example, let's say we're setting a variable.
PHP Code:
x=screenwidth/2-(width/2); 
That's okay, works the same, but it much cleaner if you do it like this.
PHP Code:
screenwidth - ( width ); 
All I did was add a space after the variable name (x), a space after the equals, a space after the screenwidth, a space after the division sign, etc.
Very simple and very easy to do. Try it out in your next script and see how much better it looks.
Another thing I do is put spaces before and after parenthesis "(" and ")". Check these out.
PHP Code:
function onCreated(){
if(var==
true){
dosomething("bob","fish","toothpaste");
}

Fix it by adding spaces after the parenthesis and after a comma. (and also after the if)
PHP Code:
function onCreated()
{
if ( var == 
true )
{
dosomething"bob""fish""toothpaste" );
}

Much cleaner (would look even better with formatting).

Part II - Separate Lines
No, this actually makes your script look better. It's not just some way to increase line count (which doesn't actually matter at all...)
For each brace "{" and "}" give it it's own line. This looks much better, and is a huge step closer to clean coding. For example
PHP Code:
if (true){
milkacow();}else{
toobad();} 
That's much too crowded.
PHP Code:
if ( true )
{
milkacow();
}
else
{
toobad();

More lines, but that doesn't matter. Much cleaner code, especially in longer scripts.
Another thing I hate is an event that has a single line of code and has no brackets.
PHP Code:
function onCreated()godosomething(); 
Can be corrected easily
PHP Code:
function onCreated()
{
  
godosomething();

Part III - Formatting
Now that you have everything else down, this is probably the most important part, and all it takes is the tab button every once in a while. Take a look at this code.
PHP Code:
function onCreated()
{
if (
true )
{
if ( 
godosomething() == )
{
dosomethingelse();
}
}

Eww, ugly. Check this out.
PHP Code:
function onCreated()
{
  if ( 
true )
  {
    if ( 
godosomething() == )
    {
      
dosomethingelse();
    }
  }

That's the last time you'll ever be caught searching for where you forgot to put that end brace! All it takes is a tab. Whenever you create a new opening brace, immediatly make the closing brace. I always do that, and it always works for me. I never have too many/too few braces in my programs.

Part IV - Naming Functions
This is really just something that makes your code look nicer. I've used several examples of functions here, such as dosomethingelse(), godosomething(), and milkacow(). These are a little ugly, but are incredibly easy to fix.
What you do is take the first word of a function (I'll use the function godosomethingelse()), and then add the rest of the words with their first capitalized. For example, that godosomethingelse() can be split into:
go do something else
now change it to this
go Do Something Else
then put them together and you have
goDoSomethingElse();
Much nicer.

Hope you all enjoyed this guide. Leave comments as you wish, but please don't flame.
Chris Zakuto
__________________
Reply With Quote
  #2  
Old 03-30-2007, 12:56 AM
Skyld Skyld is offline
Script-fu
Skyld's Avatar
Join Date: Jan 2002
Location: United Kingdom
Posts: 3,914
Skyld has much to be proud ofSkyld has much to be proud ofSkyld has much to be proud ofSkyld has much to be proud ofSkyld has much to be proud ofSkyld has much to be proud of
Send a message via AIM to Skyld
Pretty much reinforcing some of what I've written in http://forums.graalonline.com/forums...ad.php?t=61805, there are a few more guidelines that I have previously written there to help keep code clean too.

Nice work, though.
__________________
Skyld
Reply With Quote
  #3  
Old 03-30-2007, 01:04 AM
cbk1994 cbk1994 is offline
the fake one
cbk1994's Avatar
Join Date: Mar 2003
Location: San Francisco
Posts: 10,718
cbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond repute
Send a message via AIM to cbk1994
Quote:
Originally Posted by Skyld View Post
Pretty much reinforcing some of what I've written in http://forums.graalonline.com/forums...ad.php?t=61805, there are a few more guidelines that I have previously written there to help keep code clean too.

Nice work, though.
Thanks, if I'd have seen that I wouldn't have posted this ... though you did post that in 2005, so unless you're searching for it you wouldn't find it.
__________________
Reply With Quote
  #4  
Old 03-30-2007, 01:28 AM
DustyPorViva DustyPorViva is offline
Will work for food. Maybe
DustyPorViva's Avatar
Join Date: Sep 2003
Location: Maryland, USA
Posts: 9,589
DustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond repute
Send a message via AIM to DustyPorViva Send a message via MSN to DustyPorViva
The only problem I have with adding spacing just for personal looks is the fact I hate adding all that width and having to scroll horizontally.
Reply With Quote
  #5  
Old 03-30-2007, 01:30 AM
cbk1994 cbk1994 is offline
the fake one
cbk1994's Avatar
Join Date: Mar 2003
Location: San Francisco
Posts: 10,718
cbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond repute
Send a message via AIM to cbk1994
Quote:
Originally Posted by DustyPorViva View Post
The only problem I have with adding spacing just for personal looks is the fact I hate adding all that width and having to scroll horizontally.
If you maximize the screen there are few times you have to do this ... most things can be split up.

PHP Code:
temp.blah = {
"test",
"test2",
"test3"
}; 
PHP Code:
if ( true &&
cats dogs &&
player.account == "cbk1994" )

__________________
Reply With Quote
  #6  
Old 03-30-2007, 02:03 AM
DustyPorViva DustyPorViva is offline
Will work for food. Maybe
DustyPorViva's Avatar
Join Date: Sep 2003
Location: Maryland, USA
Posts: 9,589
DustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond reputeDustyPorViva has a reputation beyond repute
Send a message via AIM to DustyPorViva Send a message via MSN to DustyPorViva
Ya, I do it mainly with arrays, but I hate doing it with if statements.
Reply With Quote
  #7  
Old 03-30-2007, 04:50 AM
Falcor Falcor is offline
Darth Cucumber
Falcor's Avatar
Join Date: Mar 2001
Location: At School
Posts: 2,874
Falcor is on a distinguished road
Send a message via ICQ to Falcor Send a message via AIM to Falcor Send a message via MSN to Falcor Send a message via Yahoo to Falcor
Real coders just do it however they like it then run their code through a beautifier when they are done

see emacs/vim
__________________

subliminal message: 1+1=3
Reply With Quote
  #8  
Old 03-30-2007, 06:57 AM
Kristi Kristi is offline
Bowie's Deciple
Kristi's Avatar
Join Date: Dec 2003
Location: Boston, MA
Posts: 748
Kristi has a spectacular aura aboutKristi has a spectacular aura about
Send a message via AIM to Kristi Send a message via MSN to Kristi
Umm what?
PHP Code:
  function whatever(hi,hi) {
     if(
this==that) {
        
blah;
        
blah
        
if(true)
           
cool;
     } elseif(
yourmom) {
        
stuff;
        
morestuff;
     } else 
somethingcoolhere;
  } 
Looks way nicer then

PHP Code:
function whatever(hi,hi)
{
  if (
this==that
  {
    
blah;
    
blah
    
if(true)
      
cool;
  }
  elseif (
yourmom
  {
    
stuff;
    
morestuff;
  } 
  else
  {
    
somethingcoolhere;
  }

But that is a preference thing. I personally think what you say is better looks more obnoxious.

also, you space too much, you can use spacing to help visualize order of operations. and padding the conditional statements is a waste.

PHP Code:
something/somethingelse*3;
something y^3;
= ( (x1-x2)^+ (y1-y2)^)^.5;
if(
trueis better then if( true )
if(
== yis better then if( == 
also, single line functions are okay as wrappers. Declare them at the top, looks nice.
PHP Code:
//dont know why you would ever need to wrap showimg but an example
function onShowImg(ind,img,ix,iyshowimg(ind,img,ix,iy);

function 
whatever() {
  
stuffhappens;
  
scheduleEvent(5,"ShowImg",201,"possums.png",x+2,y+1);

And i am going to agree with dusty on multilining if statements. if it needs to be that obnoxious, store booleans before the comparision.
__________________
Reply With Quote
  #9  
Old 03-30-2007, 07:07 AM
killerogue killerogue is offline
Registered Omega
killerogue's Avatar
Join Date: Apr 2006
Location: United States
Posts: 1,920
killerogue is on a distinguished road
Send a message via AIM to killerogue Send a message via MSN to killerogue
Quote:
Originally Posted by Kristi View Post
stuff

Yeah, Hell, it really is based all off preference. For me it's more of a mood thing, sometimes I think padding looks nice, but no padding is more compact and a bit cleaner.
__________________


REMEMBER, IF YOU REP ME, LEAVE A NAME!

Quote:
Originally Posted by haunter View Post
Graal admins don't die. They go to hell and regroup.
Quote:
Originally Posted by Inverness View Post
Without scripters, your graphics and levels wouldn't do anything but sit there and look pretty.
Reply With Quote
  #10  
Old 03-30-2007, 08:29 AM
Chandler Chandler is offline
Banned
Join Date: Jan 2007
Posts: 656
Chandler will become famous soon enough
Style like a legend:
PHP Code:
function onCreated()
  
this.doMode();
function 
doMode(whichMode)
  {
  if (
temp.whichMode)
    
this.hasFound true;
   else
    
this.hasFound false;
  } 
Reply With Quote
  #11  
Old 03-30-2007, 08:43 AM
Skyld Skyld is offline
Script-fu
Skyld's Avatar
Join Date: Jan 2002
Location: United Kingdom
Posts: 3,914
Skyld has much to be proud ofSkyld has much to be proud ofSkyld has much to be proud ofSkyld has much to be proud ofSkyld has much to be proud ofSkyld has much to be proud of
Send a message via AIM to Skyld
Quote:
Originally Posted by Chandler View Post
Style like a legend:
PHP Code:
function onCreated()
  
this.doMode();
function 
doMode(whichMode)
  {
  if (
temp.whichMode)
    
this.hasFound true;
   else
    
this.hasFound false;
  } 
No. Ideally you should not be omitting brackets.
__________________
Skyld
Reply With Quote
  #12  
Old 03-30-2007, 09:56 AM
xXziroXx xXziroXx is offline
Master of Puppets
xXziroXx's Avatar
Join Date: May 2004
Location: Sweden
Posts: 5,288
xXziroXx has a brilliant futurexXziroXx has a brilliant futurexXziroXx has a brilliant futurexXziroXx has a brilliant futurexXziroXx has a brilliant futurexXziroXx has a brilliant futurexXziroXx has a brilliant future
Send a message via AIM to xXziroXx Send a message via MSN to xXziroXx
I prefer my way.


PHP Code:
function whatever(hihi)
{
  if(
this==that) {
    
blah;
    
blah
    
if(truecool;
  }
  else if(
yourmom) {
    
stuff;
    
morestuff;
  } else 
somethingcoolhere;

__________________

"A delayed game is eventually good, but a rushed game is forever bad." - Shigeru Miyamoto
Reply With Quote
  #13  
Old 03-30-2007, 11:04 AM
Twinny Twinny is offline
My empire of dirt
Twinny's Avatar
Join Date: Mar 2006
Location: Australia
Posts: 2,422
Twinny is just really niceTwinny is just really nice
Send a message via AIM to Twinny
Lol that's a mix of styles
Reply With Quote
  #14  
Old 03-30-2007, 12:08 PM
xXziroXx xXziroXx is offline
Master of Puppets
xXziroXx's Avatar
Join Date: May 2004
Location: Sweden
Posts: 5,288
xXziroXx has a brilliant futurexXziroXx has a brilliant futurexXziroXx has a brilliant futurexXziroXx has a brilliant futurexXziroXx has a brilliant futurexXziroXx has a brilliant futurexXziroXx has a brilliant future
Send a message via AIM to xXziroXx Send a message via MSN to xXziroXx
I follow these two simple things:

* New line for bracket ONLY at new functions
* Spacing in variables (such as: var = pie + (1*4)), and in function paramaters (such as blah(p1, p2, p3))
__________________

"A delayed game is eventually good, but a rushed game is forever bad." - Shigeru Miyamoto
Reply With Quote
  #15  
Old 03-30-2007, 04:41 PM
Grey Grey is offline
Classic Developer
Grey's Avatar
Join Date: Mar 2007
Location: Wales, UK
Posts: 134
Grey will become famous soon enough
Send a message via AIM to Grey
Quote:
Originally Posted by xXziroXx View Post
I prefer my way.

PHP Code:
  if(this==that) {
    
blah;
    
blah //zomg theoretical error
    
if(truecool;
  } 
With functions I always use brackets, with statements I tend to omit them if there is only one command by force of habit, but I do usually indent it still and move it to the next line. If there is an else following the if however I always use brackets. Personally I just find it looks a lot nicer that way. As far as spacing goes I agree with HR.

PHP Code:
function checkStyle() {
  if (
this.style == true) {
    
increaseAwesome();
  } else {
    
decreaseAwesome();
  }
  if (
noelse == true)
    
omit true;

Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +2. The time now is 06:57 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.
Copyright (C) 1998-2019 Toonslab All Rights Reserved.