So this post is going to attempt to get someone up to speed with Javascript enough that they can at least walk through most of the code I post here and make changes when needed. Also, I aim to at least help you know what to Google when you get stuck.
A few caveats. Is this meant to be a replacement for a full coding class? No. Will I be making generalizations and over-simplifying some extremely complex topics? Yes. Are there mistakes in this? Probably. If you find one, let me know.
/*********************************
* Intro to Javascript For AdWords Scripts
* Version 1.0
* Created By: Russ Savage
* FreeAdWordsScripts.com
*********************************/
function main() {
// This is a comment. AdWords Scripts ignores this
/* Here is another way to comment
that can be used when you need
to comment multiple lines */
// The main function tells AdWords where to start. You always need
// at least a main function in your script.
// Let's start with some variables (or primatives)
// More info on Javascript variables can be found:
// http://www.tutorialspoint.com/javascript/javascript_variables.htm
var clubName = 'Fight Club'; // declared with single quotes
var rule1 = "Don't talk about fight club."; // or double quotes if needed
var members = 12; // a number, no quotes
var dues = 3.50; // also a number
var isAcceptingNewMembers = true; // a boolean, for yes or no answers
// When you need to store multiple values, consider an Array
// More detailed intro to Arrays can be found here:
// http://www.w3schools.com/js/js_obj_array.asp
var memberNames = ['brad','edward','robert'];
// Which you can access the values with an index
var coolestMember = memberNames[0]; // pronounced member names sub zero
// 0 is the index of the first element of the array, 1 for the second, etc.
// We can use the length property of an array to find out how big it is.
var numberOfMembers = memberNames.length; // this will be 3
var dailyFights = numberOfMembers*2; // star ( * ) is an operator for multiply
// so the total number of fights is 6.
// More on operators can be found here:
// http://web.eecs.umich.edu/~bartlett/jsops.html
// If you want to group multiple variables together, you can using an Object.
// An Object is simply a grouping of common variables (and other stuff we'll see later)
var FightClub = { // The curly brace says group these things together. there is another one at the end.
clubName : 'The Fight Club', // a string variable. In an Object, we use : instead of = for assignment
rules : ["Don't talk about fight club.", // each variable is separated by a comma, instead of a semi-colon
'Do not talk about fight club.'],
memberNames : ['brad','eddy','robert','phil','dave'],
dues : 3.50,
foundedYear : 1999
};
// Now to access the variables inside the object, we use the dot
Logger.log(FightClub.clubName); // prints The Fight Club
Logger.log(FightClub.memberNames[0]); // prints brad
// Objects are one of the most important concepts of Javascript and they will come back
// again and again a little later. More details can be found here:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
// Sidebar: Why do I use camelCase for variable names? Technically
// I could
var UsEWhaTevERIwanteD = 'but camelCase is easier to read';
// and conforms to the style guide that Google recommends:
// https://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml#Naming
// Follow the style guide. It helps others read your code.
// If statements (or control statements) allow you to split your code path if needed
if(numberOfMembers > 10) { // if we have more than 10 members
dues += 1.00; // increase the dues,
// plus equals (+=) says "add the value on the right to the value on the left"
} else { // otherwise
dues -= 1.00; // decrease the dues
// there are also -=, *= (multiply), /= (divide by), and %= (modulo equals)
}
// Comparison operators like >, <, ==, ===, <=, >= allow you to compare values
// They return true or false, always
// Notice the double and triple equal signs. That's not a typo. More info can be found at:
// http://www.impressivewebs.com/why-use-triple-equals-javascipt/
// You can also have multiple if statements and multiple things to test
if(dues > 5) { // if dues are over $5
dailyFights++; // increase the fights
} else if(dues > 2 && dues <= 5) { // if dues are greater than $2, but less than $5
dailyFights--; // decrease the fights
} else { // otherwise
dailyFights = numberOfMembers*2; // reset the fights
}
// You'll probably notice none of this makes sense. it is only for example.
// Double Ampersand && just means AND, || means OR. So in the statement above,
// both statements with operators must be true in order for the fights to be decreased.
// Oh, and ++, -- is shortcut for +=1 and -=1 respectively.
// Ok, now lets talk about loops.
// Here are a few different ways to loop through the members
// This is called a While Loop and while it might be easy to understand,
// You won't use it nearly as often as the other two.
var i = 0; // the variable i is what we will use for each indice
while(i < memberNames.length) { // while i is less than the length of names
Logger.log(memberNames[i]); // print out the name
i++; // and increment the index by 1
}
// i is a variable that controls the loop. A common issue with While loops
// is that you will forget to increment the loop control and you get an infinate loop
// This is the classic For loop
// The declaration, checking, and incrementing are all done
// in the first line so it is harder to miss them
for(var index = 0; index < memberNames.length; index++) {
Logger.log(memberNames[index]);
}
// And finally, the easiest loop but hardest to explain, the ForEach loop
// This is just a variation of the For loop that handles incrementing index
// behind the scenes so you don't have to.
for(var index in memberNames) { // declare index, which will be assigned each indice
Logger.log(memberNames[index]); // Use the indice to print each name
}
// You can jump out of a loop before it reaches the end by combining the if statement
for(var index in memberNames) {
if(memberNames[index] === 'edward') {
break; // break is a keyword you can use to break out of the loop.
}
Logger.log(memberNames[index]);
}
// In this case, only the first name is printed because we broke out once we had the
// second name. More on break and its partner, continue, check out:
// http://www.tutorialspoint.com/javascript/javascript_loop_control.htm
// Now let's talk about functions. We have already seen a function in action: main()
// Functions are groupings of useful code that you can call over and over again easily
function fight(player1, player2) {
if(Math.random() < .5) {
return player1;
} else {
return player2; // return means we are going to send player2 back
// to the code that called the function
}
}
// This code can be called over and over again using a loop
for(var player1 in memberNames) { // Loop through each member
for(var player2 in memberNames) { // Then loop through again
if(player1 !== player2) { // Players can't fight themselves so check for that
Logger.log(fight(player1,player2)); // Then call the function we defined earlier
}
}
}
// This code calls fight() for:
// brad vs. edward, brad vs. robert
// edward vs. brad, edward vs. robert
// robert vs. brad, robert vs. edward
// Some other functions we have been calling are Logger.log() and Math.random()
// The cool thing is that as callers of the function, we only need to know how
// to call the function, we don't need to know how it works behind the scenes
// For example:
// var answer = LargeHadronColider.simulateEleventhDimensionalQuantumThingy(47);
// Who knows how this works. All we need to know is to send it a number and expect a
// number back.
// I hope you've been noticing all of the Objects we have been using here. Logger is one,
// Math is another one (and LargeHadronColider is a fake one). Along with variables, we
// can also put functions in there as well:
var FightClub = {
// ... all that other stuff
chant : function() {
Logger.log('His name is Robert Paulson.');
},
totalMembers : 5
};
// Whoa trippy. So what happens when I call
FightClub.chant();
// It's going to print His name is Robert Paulson
// The thing that makes Google AdWords Scripts different from writing just regular Javascript
// is all of the pre-defined Objects that use functions to interact with AdWords.
AdWordsApp.currentAccount();
Utilities.jsonParse('{}');
AdWordsApp.keywords().withLimit(10).get();
// How does the above statement work?
AdWordsApp // this is a predefined object in AdWords Scripts
.keywords() // which has a function called keywords() that returns a KeywordSelector object
.withLimit(10) // which has a function withLimit() that returns the same KeywordSelector object
.get(); // which has a function get() that returns a KeywordIterator object.
// Check out the AdWords Scripts documentation to find the objects and classes that make up these calls
// https://developers.google.com/adwords/scripts/docs/reference/adwordsapp/adwordsapp
// https://developers.google.com/adwords/scripts/docs/reference/adwordsapp/adwordsapp#keywords_0
// https://developers.google.com/adwords/scripts/docs/reference/adwordsapp/adwordsapp_keywordselector
// https://developers.google.com/adwords/scripts/docs/reference/adwordsapp/adwordsapp_keywordselector#withLimit_1
// https://developers.google.com/adwords/scripts/docs/reference/adwordsapp/adwordsapp_keywordselector#get_0
// So I think that just about does it for this tutorial. If you made it this far, awesome! Post a comment to ask
// any questions you might have.
// Thanks,
// Russ
}