iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 27
0
自我挑戰組

TDD - 紅燈,綠燈,重構,30天 TDD之路有你有我系列 第 27

Day27. 搶劫!你的手機號碼!? Codewars_Create Phone Number

小姐,手機幾號?
沒..沒事

https://ithelp.ithome.com.tw/upload/images/20180113/20107209l8u6dddTfe.png

我們今天用一點不一樣的方式來進行!
先把Code跟測是全部都寫好,然後再Refactor程式碼。

這是今天的題目!

https://ithelp.ithome.com.tw/upload/images/20180113/20107209YTQRfYE7Au.png

這個是目前可以通過Codewars的Production Code

public static string CreatePhoneNumber(int[] nums)
{
    return "(" + nums[0] + nums[1] + nums[2] + ") " +
           nums[3] + nums[4] + nums[5] + "-" +
           nums[6] + nums[7] + nums[8] + nums[9];
}

這個是目前的 test code

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void Input1234567890_Should_Be_Formatted()
    {
        Assert.AreEqual("(123) 456-7890", Kata.CreatePhoneNumber(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }));
    }

    [TestMethod]
    public void Input_1111111111_Should_Be_Formatted()
    {
        Assert.AreEqual("(111) 111-1111",Kata.CreatePhoneNumber(new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }));
    }
}

現在我們該如何著手去修改他呢?
首先我們可以看得出來nums這個陣列不斷地被用到,所以我們可以整理他,使用現有的方法去改變他,所以我們讓這個整數陣列用string.Join的方式變成字串。

public static string CreatePhoneNumber(int[] nums)
{
    var numString = string.Join("", nums);

    return "(" + numString.Substring(0, 3) + ") " +
           numString.Substring(3, 3) + "-" +
           numString.Substring(6, 4);
}

跑個測試,OK,過了,我們再來看一下有什麼可以修改的
看起來括弧的方法跟加上-的方法是可以分開的,於是….先來拆加入括弧的方法

public static string CreatePhoneNumber(int[] nums)
{
    var numString = string.Join("", nums);

    return AddParent(numString) +
           numString.Substring(3, 3) + "-" +
           numString.Substring(6, 4);
}

private static string AddParent(string s)
{
    return "(" + s.Substring(0, 3) + ") ";
}

再來拆加入-的方法

public static string CreatePhoneNumber(int[] nums)
{
    var numString = string.Join("", nums);
    return AddParent(numString) + AddDash(numString);
}

private static string AddDash(string s)
{
    return s.Substring(3, 3) + "-" + s.Substring(6, 4);
}

private static string AddParent(string s)
{
    return "(" + s.Substring(0, 3) + ") ";
}

跑個測試,PASS!

在Codewars上成功提交了~

https://ithelp.ithome.com.tw/upload/images/20180113/20107209THT199JpAz.png

提交之後看了一下別人寫的,發現這個蠻有趣的XD

https://ithelp.ithome.com.tw/upload/images/20180113/20107209agYKRc6uax.png

看起來是直接Format出來了,看起來很棒呢!!!

Git url :
https://github.com/SQZ777/Codewars_CreatePhoneNumber

Codewars Link:
https://www.codewars.com/kata/create-phone-number/train/csharp

下一題,明天見!


上一篇
Day26. 找出分歧者不是啦,我是說要找因數 Codewars_Find The Divisors
下一篇
Day28. 把塔蓋起來蓋起來!! Codewars_Build Tower
系列文
TDD - 紅燈,綠燈,重構,30天 TDD之路有你有我30

尚未有邦友留言

立即登入留言