Skip to content

Instantly share code, notes, and snippets.

@myssun0325
Last active March 5, 2018 13:15
Show Gist options
  • Save myssun0325/ec324e728fc43a21502f0024af72bd58 to your computer and use it in GitHub Desktop.
Save myssun0325/ec324e728fc43a21502f0024af72bd58 to your computer and use it in GitHub Desktop.
//
// main.swift
// UnitConverter
//
// Created by moon on 2018. 3. 5..
// Copyright © 2018년 moon. All rights reserved.
//
import Foundation
typealias Result = (length: Double, unit: String)
// Get user length and unit.
func getLength() -> String {
var inputLength: String
print("Enter a value(ex: 120cm, 1.86m): ", terminator: "")
inputLength = readLine()!
return inputLength
}
// Return (converted value, converted unit).
func convertUnit(_ length: String) -> (Double, String) {
var value = length
var resultLength: Double = 0.0
var resultUnit: String = ""
if value.hasSuffix("cm") {
value.removeLast(2)
resultLength = Double(value)! * 0.01
resultUnit = "m"
} else {
value.removeLast()
resultLength = Double(value)! * 100
resultUnit = "cm"
}
return (resultLength, resultUnit)
}
// Print the result
func printResult(_ lengthUnit: Result) {
if lengthUnit.unit == "cm" {
print(Int(lengthUnit.length), terminator: lengthUnit.unit + "\n")
} else {
print(lengthUnit.length, terminator: lengthUnit.unit + "\n")
}
}
let inputLength = getLength()
let convertedLength: Result = convertUnit(inputLength)
printResult(convertedLength)
@godrm
Copy link

godrm commented Mar 5, 2018

  • 스위프트에서는 Float 보다 Double 타입을 쓰는 것을 권장합니다.
    타입을 명시하지 않고 숫자값을 넣으면 Double 타입으로 지정됩니다.
  • 함수가 하나의 책임만 갖도록 해보세요.
    convertUnit() 함수는 두 가지 역할을 하고 있는것 같습니다.
  • 변수 이름에 타입명은 넣지 마세요. 스위프트 API 디자인 가이드라인을 따르도록 작성하셔야 합니다.

@godrm
Copy link

godrm commented Mar 5, 2018

unitValue 나 resultValue 보다 더 구체적인 표현은 없을까요?
물론 단위 변환기라서 unit이 여기저기 반복될 가능성이 높지만, 의식적으로 반복되는 단어들을 줄여보세요.

  • 예를 들어 Result 튜플이라면 내부에서는 result를 생략하는 게 좋겠습니다.
    코드를 개선하고 다음 단계를 진행해보세요 ^^

@myssun0325
Copy link
Author

Revisions 5
아무래도 길이! 변환이기 때문에 Length를 사용하는게 더 명확한거 같아서 개선해보았습니다.
말씀해주신대로 튜플의 내부에서는 그 튜플의 어떤 값을 지칭하는지로 바꾸어 보았습니다. (length, unit)

  • 사용자 입력(단위 포함) : userLength
  • 튜플 : Result = (length, unit)

@godrm
Copy link

godrm commented Mar 5, 2018

위에 개선 내용이 좋네요.

  • printResult(_ result: Result)는 result 단어가 3번이나 나옵니다. 개선해보고 싶지 않은가요?
  • userLength 변수나 getUserLength()에서 User는 어떤 의도일까요? 모든 프로그램은 사용자의 입력을 받는게 당연하기도 합니다. 한 번만 더 고민해보세요 :)
  • 이제 다음 단계를 진행해보세요. 또 다른 상황이 생길 것 같아요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment