小姐,手機幾號?
沒..沒事
我們今天用一點不一樣的方式來進行!
先把Code跟測是全部都寫好,然後再Refactor程式碼。
這是今天的題目!
這個是目前可以通過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上成功提交了~
提交之後看了一下別人寫的,發現這個蠻有趣的XD
看起來是直接Format出來了,看起來很棒呢!!!
Git url :
https://github.com/SQZ777/Codewars_CreatePhoneNumber
Codewars Link:
https://www.codewars.com/kata/create-phone-number/train/csharp
下一題,明天見!