The Art
of
Clean Code
The Basics
Our Goal: Preventing
This!
Yael Zaritsky-Peretz
Developer @ CI team @ Wix
Over
90 million
users
Wix
Over
1000
employees
~400
developers
First Feature - Product
First Feature - Code
public class MyConsole {
public static void go() throws IOException {
BufferedReader inputReader = new BufferedReader(new
InputStreamReader(System.in));
while (true) {
System.out.print("> ");
System.out.println(inputReader.readLine());
}
}
}
public class MyConsole {
public static void go() throws IOException {
BufferedReader inputReader = new BufferedReader(new
InputStreamReader(System.in));
while (true) {
System.out.print("> ");
System.out.println(inputReader.readLine());
}
}
}
public class MyConsole {
public static void go() throws IOException {
BufferedReader inputReader = new BufferedReader(new
InputStreamReader(System.in));
while (true) {
System.out.print("> ");
System.out.println(inputReader.readLine());
}
}
}
Second Feature - Product
public static void go() throws IOException {
BufferedReader inputReader =
new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Please enter one of ... sum / copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
System.out.print(">");
System.out.println(inputReader.readLine());
}
public static void go() throws IOException {
BufferedReader inputReader =
new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Please enter one of ... sum / copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
System.out.print(">");
System.out.println(inputReader.readLine());
}
Second Feature - Code
else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum...");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}…}
else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum...");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}…}
else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum...");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}…}
else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum...");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}…}
else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum...");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}…}
else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum...");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}…}
else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum...");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}…}
public static void go() throws IOException {
BufferedReader inputReader =
new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Please enter one of … sum/copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
// print a line from the user
System.out.print(">");
System.out.println(inputReader.readLine());
}
else if ("sum".equals(input)) {
// read numbers separated by space and print their sum
System.out.println("Enter numbers to sum...");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}
}
}
Agenda
● What is Clean Code?
● Example
● Some Basic Rules
● Culture
What is Clean
Code?
KISS
KISS
Test Coverage
public class NumberTest {
@Test
public void testMultiplyByTwo() {
assertThat(Number.multiplyByTwo(2),is(4));
}
}
public class Number {
public static int multiplyByTwo(int number) {
return number;
}
}
public class NumberTest {
@Test
public void testMultiplyByTwo() {
assertThat(Number.multiplyByTwo(2),is(4));
}
}
public class Number {
public static int multiplyByTwo(int number) {
return number;
}
}
public class NumberTest {
@Test
public void testMultiplyByTwo() {
assertThat(Number.multiplyByTwo(2),is(4));
}
}
public class Number {
public static int multiplyByTwo(int number) {
return number;
}
}
public class NumberTest {
@Test
public void testMultiplyByTwo() {
assertThat(Number.multiplyByTwo(2),is(4));
}
}
public class Number {
public static int multiplyByTwo(int number) {
return number * 2;
}
}
public class NumberTest {
@Test
public void testMultiplyByTwo() {
assertThat(Number.multiplyByTwo(2),is(4));
}
}
public class Number {
public static int multiplyByTwo(int number) {
return number * 2;
}
}
Test Coverage
Example
public static void go() throws IOException {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Please enter one of the following actions: sum / copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
System.out.print(">");
System.out.println(inputReader.readLine());
} else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum, separated by space. For example: '233 67 8 456086'");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}
}
}
public static void go() throws IOException {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Please enter one of the following actions: sum / copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
System.out.print(">");
System.out.println(inputReader.readLine());
} else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum, separated by space. For example: '233 67 8 456086'");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}
}
}
public static void go() throws IOException {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Please enter one of the following actions: sum / copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
// print a line from the user
System.out.print(">");
System.out.println(inputReader.readLine());
} else if ("sum".equals(input)) {
// read numbers separated by space and print their sum
System.out.println("Enter numbers to sum, separated by space. For example: '233 67 8 456086'");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}
}
}
BUG found
TDD
Test Driven Design
else if ("sum".equals(input)) {
// read numbers separated by space and print their sum
System.out.println("Enter numbers to sum...");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}
Make sure that func("3 3") returns "Sum of 3, 3 is 6"
else if ("sum".equals(input)) {
// read numbers separated by space and print their sum
System.out.println("Enter numbers to sum...");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}
else if ("sum".equals(input)) {
// read numbers separated by space and print their sum
System.out.println("Enter numbers to sum...");
String nToSIn = inputReader.readLine();
String str = NumbersToSum.getOutputString(nToSIn);
System.out.println(str);
}
public class NumbersToSum {
public static String getOutputString(String … nToSIn) {
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
return str;
}}
else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum...");
String nToSIn = inputReader.readLine();
String str = NumbersToSum.getOutputString(nToSIn);
System.out.println(str);
}
@Test
public void testGetOutputStringForSingleNumber() {
assertThat(NumbersToSum.getOutputString("3 3"),
is("Sum of 3, 3 is 6"));
}
public class NumbersToSum {
public static String getOutputString(String … nToSIn) {
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
return str;
}
}
public class NumbersToSum {
public static String getOutputString(String … nToSIn) {
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += " is " + sum;
return str;
}
}
BUG FIXED ! ! ! Test is GREEN
public class NumbersToSum {
public static String getOutputString(String … nToSIn) {
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += " is " + sum;
return str;
}
}
else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum...");
String nToSIn = inputReader.readLine();
String str = NumbersToSum.getOutputString(nToSIn);
System.out.println(str);
}
else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum...");
String numbersToSumInput = inputReader.readLine();
String str = NumbersToSum.getOutputString(numbersToSumInput);
System.out.println(str);
}
else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum...");
String numbersToSumInput = inputReader.readLine();
String str = NumbersToSum.getOutputString(numbersToSumInput);
System.out.println(str);
}
public class NumbersToSum {
public static String getOutputString(String … nToSIn) {
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += " is " + sum;
return str;
}
}
public class NumbersToSum {
public static String getOutputString(String … numbersToSumInput) {
String[] nToS = numbersToSumInput.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += " is " + sum;
return str;
}
}
public class NumbersToSum {
public static String getOutputString(String … numbersToSumInput) {
String[] nToS = numbersToSumInput.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += " is " + sum;
return str;
}
}
public class NumbersToSum {
public static String getOutputString(String … numbersToSumInput) {
String[] numbersToSum = numbersToSumInput.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += numbersToSum[i] + ", ";
sum += Integer.parseInt(numbersToSum[0]);
}
str = str.substring(0, str.length() - 2);
str += " is " + sum;
return str;
}
}
public class NumbersToSum {
public static String getOutputString(String … numbersToSumInput) {
String[] numbersToSum = numbersToSumInput.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += numbersToSum[i] + ", ";
sum += Integer.parseInt(numbersToSum[0]);
}
str = str.substring(0, str.length() - 2);
str += " is " + sum;
return str;
}
}
Another BUG found
public class NumbersToSum {
public static String getOutputString(String … numbersToSumInput) {
String[] numbersToSum = numbersToSumInput.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += numbersToSum[i] + ", ";
sum += Integer.parseInt(numbersToSum[0]);
}
str = str.substring(0, str.length() - 2);
str += " is " + sum;
return str;
}
}
@Test
public void testGetOutputString() {
assertThat(NumbersToSumPrinter.getOutputString("3 231"),
is("Sum of 3, 231 is 234"));
}
@Test
public void testSumOfMoreThanOneNumber() {
assertThat(NumbersToSum.sum(3, 231),
is(234));
}
public class NumbersToSum {
public static String getOutputString(String … numbersToSumInput) {
String[] numbersToSum = numbersToSumInput.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += numbersToSum[i] + ", ";
sum += Integer.parseInt(numbersToSum[0]);
}
str = str.substring(0, str.length() - 2);
str += " is " + sum;
return str;
}
}
public class NumbersToSumPrinter {
public static String getOutputString(String numbersToSumInput) {
String[] numbersToSum = numbersToSumInput.split(" ");
String str = "Sum of ";
for (int i = 0; i < numbersToSum.length; i++) {
str += numbersToSum[i] + ", ";
}
str = str.substring(0, str.length() - 2);
int sum = NumbersToSum.sum(intArrayFromStrings(numbersToSum));
str += " is " + sum;
return str;
}
}
public class NumbersToSumPrinter {
public static String getOutputString(String numbersToSumInput) {
String[] numbersToSum = numbersToSumInput.split(" ");
String str = "Sum of ";
for (int i = 0; i < numbersToSum.length; i++) {
str += numbersToSum[i] + ", ";
}
str = str.substring(0, str.length() - 2);
int sum = NumbersToSum.sum(intArrayFromStrings(numbersToSum));
str += " is " + sum;
return str;
}
}
public class NumbersToSum {
public static int sum(int ... numbersToSum) {
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
sum += numbersToSum[0];
}
return sum;
}
}
public class NumbersToSum {
public static int sum(int ... numbersToSum) {
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
sum += numbersToSum[0];
}
return sum;
}
}
public class NumbersToSum {
public static int sum(int ... numbersToSum) {
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
sum += numbersToSum[i];
}
return sum;
}
}
BUG FIXED ! ! ! Test is GREEN
Reminder
public static void go() throws IOException {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Please enter one of the following actions: sum / copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
// print a line from the user
System.out.print(">");
System.out.println(inputReader.readLine());
} else if ("sum".equals(input)) {
// read numbers separated by space and print their sum
System.out.println("Enter numbers to sum ...");
String nToSIn = inputReader.readLine();
String[] nToS = nToSIn.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
str = str.substring(0, str.length() - 2);
str += "is " + sum;
System.out.println(str);
}
}
}
public class MyConsole {
public void go() throws IOException {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Please enter one … sum / copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
// print a line from the user
System.out.print(">");
System.out.println(inputReader.readLine());
} else if ("sum".equals(input)) {
// read numbers separated by space and print their sum
System.out.println("Enter numbers to sum ...");
String numbersToSumInput = inputReader.readLine();
String str = NumbersToSumPrinter.getOutputString(numbersToSumInput);
System.out.println(str);
}
}
}
}
public class MyConsole {
public void go() throws IOException {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Please enter one … sum / copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
// print a line from the user
System.out.print(">");
System.out.println(inputReader.readLine());
} else if ("sum".equals(input)) {
// read numbers separated by space and print their sum
System.out.println("Enter numbers to sum ...");
String numbersToSumInput = inputReader.readLine();
String str = NumbersToSumPrinter.getOutputString(numbersToSumInput);
System.out.println(str);
}
}
}
}
public class MyConsole {
public void go() throws IOException {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Please enter one … sum / copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
// print a line from the user
System.out.print(">");
System.out.println(inputReader.readLine());
} else if ("sum".equals(input)) {
// read numbers separated by space and print their sum
System.out.println("Enter numbers to sum ...");
String numbersToSumInput = inputReader.readLine();
String str = NumbersToSumPrinter.getOutputString(numbersToSumInput);
System.out.println(str);
}
}
}
}
public class MyConsole {
public void go() throws IOException {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Please enter one … sum / copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
// print a line from the user
System.out.print(">");
System.out.println(inputReader.readLine());
} else if ("sum".equals(input)) {
// read numbers separated by space and print their sum
System.out.println("Enter numbers to sum ...");
String numbersToSumInput = inputReader.readLine();
String str = NumbersToSumPrinter.getOutputString(numbersToSumInput);
System.out.println(str);
}
}
}
}
public class MyConsole {
public void go() throws IOException {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Please enter one of the following actions: sum / copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
waitForInputAndCopy(inputReader);
} else if ("sum".equals(input)) {
// read numbers separated by space and print their sum
System.out.println("Enter numbers to sum ...");
String numbersToSumInput = inputReader.readLine();
String str = NumbersToSumPrinter.getOutputString(numbersToSumInput);
System.out.println(str);
}
}
}
private void waitForInputAndCopy(BufferedReader inputReader) throws IOException {
System.out.print(">");
System.out.println(inputReader.readLine());
}
}
public class MyConsole {
public void go() throws IOException {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("Please enter one of the following actions: sum / copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
waitForInputAndCopy(inputReader);
} else if ("sum".equals(input)) {
waitForInputAndSumNumbers(inputReader);
}
}
}
private void waitForInputAndSumNumbers(BufferedReader inputReader) throws IOException {
System.out.println("Enter numbers to sum, separated by space. For example: '233 67 8 456086'");
String numbersToSumInput = inputReader.readLine();
String str = NumbersToSumPrinter.getOutputString(numbersToSumInput);
System.out.println(str);
}
private void waitForInputAndCopy(BufferedReader inputReader) throws IOException {
System.out.print(">");
System.out.println(inputReader.readLine());
}
}
Some Basic
Rules
Use Pronounceable, Meaningful Names
String numbersToSumInput = inputReader.readLine();
String[] nToS = numbersToSumInput.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < nToS.length; i++) {
str += nToS[i] + ", ";
sum += Integer.parseInt(nToS[0]);
}
vs.
String numbersToSumInput = inputReader.readLine();
String[] numbersToSum = numbersToSumInput.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += numbersToSum[i] + ", ";
sum += Integer.parseInt(numbersToSum[0]);
}
Do Only One Thing
FUNCTIONS / CLASSES / MODULES SHOULD DO ONE THING.
THEY SHOULD DO IT WELL.
THEY SHOULD DO IT ONLY.
while (true) {
System.out.println("Please enter one … sum / copycat");
String input = inputReader.readLine();
if ("copycat".equals(input)) {
System.out.print(">");
System.out.println(inputReader.readLine());
} else if ("sum".equals(input)) {
System.out.println("Enter numbers to sum ...");
String numbersToSumInput = inputReader.readLine();
String str = NumbersToSumPrinter.getOutputString(numbersToSumInput);
System.out.println(str);
}
}
No Need for Comments
Formatting
public class NumbersToSum {
public static String getOutputString(String … numbersToSumInput) {
String[] numbersToSum = numbersToSumInput.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += numbersToSum[i] + ", ";
sum += Integer.parseInt(numbersToSum[0]);
}
str = str.substring(0, str.length() - 2);
str += " is " + sum;
return str;
}
}
public class NumbersToSum {
public static String getOutputString(String … numbersToSumInput) {
String[] numbersToSum = numbersToSumInput.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += numbersToSum[i] + ", ";
sum += Integer.parseInt(numbersToSum[0]);
}
str = str.substring(0, str.length() - 2);
str += " is " + sum;
return str;
}
}
public class NumbersToSum {
public static String getOutputString(String … numbersToSumInput) {
String[] numbersToSum = numbersToSumInput.split(" ");
String str = "Sum of ";
int sum = 0;
for (int i = 0; i < numbersToSum.length; i++) {
str += numbersToSum[i] + ", ";
sum += Integer.parseInt(numbersToSum[0]);
}
str = str.substring(0, str.length() - 2);
str += " is " + sum;
return str;
}
}
DO NOT Treat Test Code Differently
Culture
Insights
● Reading Code is Hard
● Code Rots
Refactor Until Your Code is Clean
● Hard to Get Done Right on First Try
● Reading clean code should make you smile
the way a well-crafted music box or well-designed car would
Leave the Campground
Cleaner Than You’ve Found it
● Change one variable name for the better,
● Break up one function that’s a little too large,
● Eliminate one small bit of duplication
The cleanup doesn’t have to be something big:
No Ego
I’m here to learn
Smart Ass
(Don’t be one)
How YOU can take it from here
● Make it a priority
● It seems to take longer
● Read / see about it
● Talk to your peers
Questions?
Yael Zaritsky yaelzyaelz@wix.com
yaelzaritsky@gmail.com
Thank You
Yael Zaritsky yaelzyaelz@wix.com
yaelzaritsky@gmail.com
Sources
Clean Code (pdf)
GOOS style TDD by Example - Sagy Rozman
Cultural Learning of Testing - Gil Tayar
Finding Your Organization’s Code Deodorant - Ittai Zeidman
private static int[] intArrayFromStrings(String[] numbersToSum) {
int[] intArray = new int[numbersToSum.length];
for(int i=0 ; i<numbersToSum.length ; i++) {
intArray[i]=Integer.parseInt(numbersToSum[i]);
}
return intArray;
}
}

The Art of Clean Code

  • 1.
  • 3.
  • 4.
  • 5.
  • 7.
  • 8.
    First Feature -Code public class MyConsole { public static void go() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.print("> "); System.out.println(inputReader.readLine()); } } } public class MyConsole { public static void go() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.print("> "); System.out.println(inputReader.readLine()); } } } public class MyConsole { public static void go() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.print("> "); System.out.println(inputReader.readLine()); } } }
  • 9.
  • 10.
    public static voidgo() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Please enter one of ... sum / copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { System.out.print(">"); System.out.println(inputReader.readLine()); } public static void go() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Please enter one of ... sum / copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { System.out.print(">"); System.out.println(inputReader.readLine()); } Second Feature - Code else if ("sum".equals(input)) { System.out.println("Enter numbers to sum..."); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); }…} else if ("sum".equals(input)) { System.out.println("Enter numbers to sum..."); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); }…} else if ("sum".equals(input)) { System.out.println("Enter numbers to sum..."); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); }…} else if ("sum".equals(input)) { System.out.println("Enter numbers to sum..."); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); }…} else if ("sum".equals(input)) { System.out.println("Enter numbers to sum..."); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); }…} else if ("sum".equals(input)) { System.out.println("Enter numbers to sum..."); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); }…} else if ("sum".equals(input)) { System.out.println("Enter numbers to sum..."); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); }…}
  • 11.
    public static voidgo() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Please enter one of … sum/copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { // print a line from the user System.out.print(">"); System.out.println(inputReader.readLine()); } else if ("sum".equals(input)) { // read numbers separated by space and print their sum System.out.println("Enter numbers to sum..."); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); } } }
  • 14.
    Agenda ● What isClean Code? ● Example ● Some Basic Rules ● Culture
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
    public class NumberTest{ @Test public void testMultiplyByTwo() { assertThat(Number.multiplyByTwo(2),is(4)); } } public class Number { public static int multiplyByTwo(int number) { return number; } } public class NumberTest { @Test public void testMultiplyByTwo() { assertThat(Number.multiplyByTwo(2),is(4)); } } public class Number { public static int multiplyByTwo(int number) { return number; } } public class NumberTest { @Test public void testMultiplyByTwo() { assertThat(Number.multiplyByTwo(2),is(4)); } } public class Number { public static int multiplyByTwo(int number) { return number; } }
  • 20.
    public class NumberTest{ @Test public void testMultiplyByTwo() { assertThat(Number.multiplyByTwo(2),is(4)); } } public class Number { public static int multiplyByTwo(int number) { return number * 2; } } public class NumberTest { @Test public void testMultiplyByTwo() { assertThat(Number.multiplyByTwo(2),is(4)); } } public class Number { public static int multiplyByTwo(int number) { return number * 2; } }
  • 21.
  • 22.
  • 23.
    public static voidgo() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Please enter one of the following actions: sum / copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { System.out.print(">"); System.out.println(inputReader.readLine()); } else if ("sum".equals(input)) { System.out.println("Enter numbers to sum, separated by space. For example: '233 67 8 456086'"); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); } } } public static void go() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Please enter one of the following actions: sum / copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { System.out.print(">"); System.out.println(inputReader.readLine()); } else if ("sum".equals(input)) { System.out.println("Enter numbers to sum, separated by space. For example: '233 67 8 456086'"); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); } } } public static void go() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Please enter one of the following actions: sum / copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { // print a line from the user System.out.print(">"); System.out.println(inputReader.readLine()); } else if ("sum".equals(input)) { // read numbers separated by space and print their sum System.out.println("Enter numbers to sum, separated by space. For example: '233 67 8 456086'"); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); } } }
  • 24.
  • 27.
  • 28.
    else if ("sum".equals(input)){ // read numbers separated by space and print their sum System.out.println("Enter numbers to sum..."); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); }
  • 29.
    Make sure thatfunc("3 3") returns "Sum of 3, 3 is 6"
  • 30.
    else if ("sum".equals(input)){ // read numbers separated by space and print their sum System.out.println("Enter numbers to sum..."); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); } else if ("sum".equals(input)) { // read numbers separated by space and print their sum System.out.println("Enter numbers to sum..."); String nToSIn = inputReader.readLine(); String str = NumbersToSum.getOutputString(nToSIn); System.out.println(str); }
  • 31.
    public class NumbersToSum{ public static String getOutputString(String … nToSIn) { String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; return str; }} else if ("sum".equals(input)) { System.out.println("Enter numbers to sum..."); String nToSIn = inputReader.readLine(); String str = NumbersToSum.getOutputString(nToSIn); System.out.println(str); }
  • 32.
    @Test public void testGetOutputStringForSingleNumber(){ assertThat(NumbersToSum.getOutputString("3 3"), is("Sum of 3, 3 is 6")); }
  • 34.
    public class NumbersToSum{ public static String getOutputString(String … nToSIn) { String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; return str; } } public class NumbersToSum { public static String getOutputString(String … nToSIn) { String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += " is " + sum; return str; } }
  • 37.
    BUG FIXED !! ! Test is GREEN
  • 38.
    public class NumbersToSum{ public static String getOutputString(String … nToSIn) { String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += " is " + sum; return str; } } else if ("sum".equals(input)) { System.out.println("Enter numbers to sum..."); String nToSIn = inputReader.readLine(); String str = NumbersToSum.getOutputString(nToSIn); System.out.println(str); } else if ("sum".equals(input)) { System.out.println("Enter numbers to sum..."); String numbersToSumInput = inputReader.readLine(); String str = NumbersToSum.getOutputString(numbersToSumInput); System.out.println(str); } else if ("sum".equals(input)) { System.out.println("Enter numbers to sum..."); String numbersToSumInput = inputReader.readLine(); String str = NumbersToSum.getOutputString(numbersToSumInput); System.out.println(str); } public class NumbersToSum { public static String getOutputString(String … nToSIn) { String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += " is " + sum; return str; } } public class NumbersToSum { public static String getOutputString(String … numbersToSumInput) { String[] nToS = numbersToSumInput.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += " is " + sum; return str; } } public class NumbersToSum { public static String getOutputString(String … numbersToSumInput) { String[] nToS = numbersToSumInput.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += " is " + sum; return str; } } public class NumbersToSum { public static String getOutputString(String … numbersToSumInput) { String[] numbersToSum = numbersToSumInput.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += numbersToSum[i] + ", "; sum += Integer.parseInt(numbersToSum[0]); } str = str.substring(0, str.length() - 2); str += " is " + sum; return str; } }
  • 39.
    public class NumbersToSum{ public static String getOutputString(String … numbersToSumInput) { String[] numbersToSum = numbersToSumInput.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += numbersToSum[i] + ", "; sum += Integer.parseInt(numbersToSum[0]); } str = str.substring(0, str.length() - 2); str += " is " + sum; return str; } }
  • 40.
  • 42.
    public class NumbersToSum{ public static String getOutputString(String … numbersToSumInput) { String[] numbersToSum = numbersToSumInput.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += numbersToSum[i] + ", "; sum += Integer.parseInt(numbersToSum[0]); } str = str.substring(0, str.length() - 2); str += " is " + sum; return str; } }
  • 43.
    @Test public void testGetOutputString(){ assertThat(NumbersToSumPrinter.getOutputString("3 231"), is("Sum of 3, 231 is 234")); } @Test public void testSumOfMoreThanOneNumber() { assertThat(NumbersToSum.sum(3, 231), is(234)); }
  • 44.
    public class NumbersToSum{ public static String getOutputString(String … numbersToSumInput) { String[] numbersToSum = numbersToSumInput.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += numbersToSum[i] + ", "; sum += Integer.parseInt(numbersToSum[0]); } str = str.substring(0, str.length() - 2); str += " is " + sum; return str; } }
  • 45.
    public class NumbersToSumPrinter{ public static String getOutputString(String numbersToSumInput) { String[] numbersToSum = numbersToSumInput.split(" "); String str = "Sum of "; for (int i = 0; i < numbersToSum.length; i++) { str += numbersToSum[i] + ", "; } str = str.substring(0, str.length() - 2); int sum = NumbersToSum.sum(intArrayFromStrings(numbersToSum)); str += " is " + sum; return str; } }
  • 46.
    public class NumbersToSumPrinter{ public static String getOutputString(String numbersToSumInput) { String[] numbersToSum = numbersToSumInput.split(" "); String str = "Sum of "; for (int i = 0; i < numbersToSum.length; i++) { str += numbersToSum[i] + ", "; } str = str.substring(0, str.length() - 2); int sum = NumbersToSum.sum(intArrayFromStrings(numbersToSum)); str += " is " + sum; return str; } }
  • 47.
    public class NumbersToSum{ public static int sum(int ... numbersToSum) { int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { sum += numbersToSum[0]; } return sum; } }
  • 49.
    public class NumbersToSum{ public static int sum(int ... numbersToSum) { int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { sum += numbersToSum[0]; } return sum; } }
  • 50.
    public class NumbersToSum{ public static int sum(int ... numbersToSum) { int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { sum += numbersToSum[i]; } return sum; } }
  • 52.
    BUG FIXED !! ! Test is GREEN
  • 53.
  • 54.
    public static voidgo() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Please enter one of the following actions: sum / copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { // print a line from the user System.out.print(">"); System.out.println(inputReader.readLine()); } else if ("sum".equals(input)) { // read numbers separated by space and print their sum System.out.println("Enter numbers to sum ..."); String nToSIn = inputReader.readLine(); String[] nToS = nToSIn.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } str = str.substring(0, str.length() - 2); str += "is " + sum; System.out.println(str); } } }
  • 55.
    public class MyConsole{ public void go() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Please enter one … sum / copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { // print a line from the user System.out.print(">"); System.out.println(inputReader.readLine()); } else if ("sum".equals(input)) { // read numbers separated by space and print their sum System.out.println("Enter numbers to sum ..."); String numbersToSumInput = inputReader.readLine(); String str = NumbersToSumPrinter.getOutputString(numbersToSumInput); System.out.println(str); } } } }
  • 56.
    public class MyConsole{ public void go() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Please enter one … sum / copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { // print a line from the user System.out.print(">"); System.out.println(inputReader.readLine()); } else if ("sum".equals(input)) { // read numbers separated by space and print their sum System.out.println("Enter numbers to sum ..."); String numbersToSumInput = inputReader.readLine(); String str = NumbersToSumPrinter.getOutputString(numbersToSumInput); System.out.println(str); } } } }
  • 57.
    public class MyConsole{ public void go() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Please enter one … sum / copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { // print a line from the user System.out.print(">"); System.out.println(inputReader.readLine()); } else if ("sum".equals(input)) { // read numbers separated by space and print their sum System.out.println("Enter numbers to sum ..."); String numbersToSumInput = inputReader.readLine(); String str = NumbersToSumPrinter.getOutputString(numbersToSumInput); System.out.println(str); } } } } public class MyConsole { public void go() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Please enter one … sum / copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { // print a line from the user System.out.print(">"); System.out.println(inputReader.readLine()); } else if ("sum".equals(input)) { // read numbers separated by space and print their sum System.out.println("Enter numbers to sum ..."); String numbersToSumInput = inputReader.readLine(); String str = NumbersToSumPrinter.getOutputString(numbersToSumInput); System.out.println(str); } } } }
  • 58.
    public class MyConsole{ public void go() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Please enter one of the following actions: sum / copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { waitForInputAndCopy(inputReader); } else if ("sum".equals(input)) { // read numbers separated by space and print their sum System.out.println("Enter numbers to sum ..."); String numbersToSumInput = inputReader.readLine(); String str = NumbersToSumPrinter.getOutputString(numbersToSumInput); System.out.println(str); } } } private void waitForInputAndCopy(BufferedReader inputReader) throws IOException { System.out.print(">"); System.out.println(inputReader.readLine()); } }
  • 59.
    public class MyConsole{ public void go() throws IOException { BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("Please enter one of the following actions: sum / copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { waitForInputAndCopy(inputReader); } else if ("sum".equals(input)) { waitForInputAndSumNumbers(inputReader); } } } private void waitForInputAndSumNumbers(BufferedReader inputReader) throws IOException { System.out.println("Enter numbers to sum, separated by space. For example: '233 67 8 456086'"); String numbersToSumInput = inputReader.readLine(); String str = NumbersToSumPrinter.getOutputString(numbersToSumInput); System.out.println(str); } private void waitForInputAndCopy(BufferedReader inputReader) throws IOException { System.out.print(">"); System.out.println(inputReader.readLine()); } }
  • 60.
  • 61.
    Use Pronounceable, MeaningfulNames String numbersToSumInput = inputReader.readLine(); String[] nToS = numbersToSumInput.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < nToS.length; i++) { str += nToS[i] + ", "; sum += Integer.parseInt(nToS[0]); } vs. String numbersToSumInput = inputReader.readLine(); String[] numbersToSum = numbersToSumInput.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += numbersToSum[i] + ", "; sum += Integer.parseInt(numbersToSum[0]); }
  • 62.
    Do Only OneThing FUNCTIONS / CLASSES / MODULES SHOULD DO ONE THING. THEY SHOULD DO IT WELL. THEY SHOULD DO IT ONLY. while (true) { System.out.println("Please enter one … sum / copycat"); String input = inputReader.readLine(); if ("copycat".equals(input)) { System.out.print(">"); System.out.println(inputReader.readLine()); } else if ("sum".equals(input)) { System.out.println("Enter numbers to sum ..."); String numbersToSumInput = inputReader.readLine(); String str = NumbersToSumPrinter.getOutputString(numbersToSumInput); System.out.println(str); } }
  • 63.
    No Need forComments
  • 64.
    Formatting public class NumbersToSum{ public static String getOutputString(String … numbersToSumInput) { String[] numbersToSum = numbersToSumInput.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += numbersToSum[i] + ", "; sum += Integer.parseInt(numbersToSum[0]); } str = str.substring(0, str.length() - 2); str += " is " + sum; return str; } } public class NumbersToSum { public static String getOutputString(String … numbersToSumInput) { String[] numbersToSum = numbersToSumInput.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += numbersToSum[i] + ", "; sum += Integer.parseInt(numbersToSum[0]); } str = str.substring(0, str.length() - 2); str += " is " + sum; return str; } } public class NumbersToSum { public static String getOutputString(String … numbersToSumInput) { String[] numbersToSum = numbersToSumInput.split(" "); String str = "Sum of "; int sum = 0; for (int i = 0; i < numbersToSum.length; i++) { str += numbersToSum[i] + ", "; sum += Integer.parseInt(numbersToSum[0]); } str = str.substring(0, str.length() - 2); str += " is " + sum; return str; } }
  • 65.
    DO NOT TreatTest Code Differently
  • 66.
  • 67.
    Insights ● Reading Codeis Hard ● Code Rots
  • 68.
    Refactor Until YourCode is Clean ● Hard to Get Done Right on First Try ● Reading clean code should make you smile the way a well-crafted music box or well-designed car would
  • 69.
    Leave the Campground CleanerThan You’ve Found it
  • 70.
    ● Change onevariable name for the better, ● Break up one function that’s a little too large, ● Eliminate one small bit of duplication The cleanup doesn’t have to be something big:
  • 71.
  • 72.
  • 73.
    How YOU cantake it from here ● Make it a priority ● It seems to take longer ● Read / see about it ● Talk to your peers
  • 74.
  • 75.
  • 76.
    Thank You Yael Zaritskyyaelzyaelz@wix.com yaelzaritsky@gmail.com
  • 77.
    Sources Clean Code (pdf) GOOSstyle TDD by Example - Sagy Rozman Cultural Learning of Testing - Gil Tayar Finding Your Organization’s Code Deodorant - Ittai Zeidman
  • 78.
    private static int[]intArrayFromStrings(String[] numbersToSum) { int[] intArray = new int[numbersToSum.length]; for(int i=0 ; i<numbersToSum.length ; i++) { intArray[i]=Integer.parseInt(numbersToSum[i]); } return intArray; } }