detangling your javascript

79
Detangling Your JavaScript An Intro to JS Refactoring

Upload: chris-powers

Post on 29-Nov-2014

2.451 views

Category:

Technology


0 download

DESCRIPTION

This is an introduction to refactoring techniques for JavaScript code that works but is legacy, poorly written or otherwise "tangled."

TRANSCRIPT

Page 1: Detangling Your JavaScript

Detangling YourJavaScript

An Intro to JS Refactoring

Page 2: Detangling Your JavaScript

Chris PowersConsultant with //obtiva

http://obtiva.com@chrisjpowers

Page 3: Detangling Your JavaScript

3 Kinds of People Deal with Tangled Code

Page 4: Detangling Your JavaScript

Consultants

Page 5: Detangling Your JavaScript

New Hires

Page 6: Detangling Your JavaScript

...and Everyone Else!

Page 7: Detangling Your JavaScript

We all work with Tangled code on a

daily basis

Page 8: Detangling Your JavaScript

What is “Tangled” JavaScript?

Page 9: Detangling Your JavaScript

It is not BAD code!

Page 10: Detangling Your JavaScript

Bad code doesn’t work.

Page 11: Detangling Your JavaScript

Tangled code does work!

Page 12: Detangling Your JavaScript

Tangled code will become “bad” code eventually because...

Page 13: Detangling Your JavaScript

Tangled code is hard to read and understand.

Page 14: Detangling Your JavaScript

Tangled code is hard to update and maintain.

Page 15: Detangling Your JavaScript

Tangled code is easy to accidentally break.

Page 16: Detangling Your JavaScript

“Tangled code is code based on lost

requirements.”

- Noel Rappin

Page 17: Detangling Your JavaScript

Got Tangled Code?Do you...

Page 18: Detangling Your JavaScript

Option #1:Big Bang Rewrite

Page 19: Detangling Your JavaScript

Option #2:Detangle (Refactor)

Page 20: Detangling Your JavaScript

ALWAYS Detangle!NEVER Rewrite!

Page 21: Detangling Your JavaScript

Rewrites are tempting

Page 22: Detangling Your JavaScript

Coders want to Code!

Page 23: Detangling Your JavaScript

Writing codeis easier than reading code.

Page 24: Detangling Your JavaScript

You CANNOT rewrite code you don’t

understand.

Page 25: Detangling Your JavaScript

Your rewrite will likely miss requirements

Page 26: Detangling Your JavaScript

In your client’s eyes, your rewrite will be

worse than the original.

Page 27: Detangling Your JavaScript

What is Refactoring?

Page 28: Detangling Your JavaScript

Methodically improving code quality without

altering behavior.

Page 29: Detangling Your JavaScript

Making your complex code simple.

Page 30: Detangling Your JavaScript

Simple code is...

Page 31: Detangling Your JavaScript

#1Tested

Page 32: Detangling Your JavaScript

#2Reveals Intent

Page 33: Detangling Your JavaScript

#3DRY - Each piece of knowledge exists in

only one place

Page 34: Detangling Your JavaScript

#4Small

Page 35: Detangling Your JavaScript

Let’s Start Detangling...

Page 36: Detangling Your JavaScript
Page 37: Detangling Your JavaScript

First Things First:Set a Goal

Page 38: Detangling Your JavaScript

How much code needs to be refactored?

How deeply?

Page 39: Detangling Your JavaScript

Write a Test!

Page 40: Detangling Your JavaScript
Page 41: Detangling Your JavaScript

Why write tests?

Page 42: Detangling Your JavaScript

Makes the code simple

Page 43: Detangling Your JavaScript

Ensures BehaviorDoes Not Change

Page 44: Detangling Your JavaScript

Forces Developer to Understand

Requirements

Page 45: Detangling Your JavaScript

Refactoring #1Name the Anonymous

Functions

Page 46: Detangling Your JavaScript
Page 47: Detangling Your JavaScript

Refactoring #2Document

Responsibilities with Comments

Page 48: Detangling Your JavaScript
Page 49: Detangling Your JavaScript

Refactoring #3Extract Methods

Page 50: Detangling Your JavaScript
Page 51: Detangling Your JavaScript

Refactoring #4Improve Variable

Names

Page 52: Detangling Your JavaScript
Page 53: Detangling Your JavaScript

Refactoring #5Add Local Vars to Improve Legibility

Page 54: Detangling Your JavaScript
Page 55: Detangling Your JavaScript

Keep Extracting Functions

Page 56: Detangling Your JavaScript
Page 57: Detangling Your JavaScript

Refactoring #6Add Clarity with Underscore.js

Page 58: Detangling Your JavaScript
Page 59: Detangling Your JavaScript

Refactoring #7Isolate Display Logic

Page 60: Detangling Your JavaScript
Page 61: Detangling Your JavaScript

Refactoring #8Isolate DOM Manipulation

Page 62: Detangling Your JavaScript
Page 63: Detangling Your JavaScript

Refactoring #9Hide “Private”

Methods in Closures

Page 64: Detangling Your JavaScript
Page 65: Detangling Your JavaScript

Refactoring #10Scope Public Methods

in Namespaces

Page 66: Detangling Your JavaScript
Page 67: Detangling Your JavaScript

Refactoring #11Use Tiered

Sub-Namespaces

Page 68: Detangling Your JavaScript
Page 69: Detangling Your JavaScript

Refactoring #12Extend Namespaces(Don’t Overwrite)

Page 70: Detangling Your JavaScript
Page 71: Detangling Your JavaScript

Refactoring #13DRY Up Namespace

Initialization

Page 72: Detangling Your JavaScript
Page 73: Detangling Your JavaScript
Page 74: Detangling Your JavaScript

Resources

Page 78: Detangling Your JavaScript

http://javascriptmasters.com

Signup Code: ccc2011

ccc2011

Page 79: Detangling Your JavaScript

Got questions?@chrisjpowers