문제

말하자는 내가 쓰는 함수를 사이에 변환온 것입니다.고 싶을 지원하는 이상 화씨,섭씨,그리고 켈빈이다.그것은 더 나을 통과하는 소규모 및 대규모로 별도의 매개변수 함수,또는 어떤 종류의 결합 매개 변수는?

예를 들어 1-별도의 매개변수:기능 convertTemperature("섭씨","화씨",22)

예제 2-결합 매개변수:기능 convertTemperature("c-f",22)

코드부 기능은 아마도 그것이 어디 계산합니다.두 개의 매개변수를 결정하는 논리를 어떤 식 우리가 사용하는 것은 약간 더 복잡,하지만 하나의 매개 변수는 느낌이 되지 않습니다.

생각?

도움이 되었습니까?

해결책

이동과 함께 첫 번째 옵션이지만,오히려 문자열(는 오류가 발생)에서,일정한 값 또는 열거는 경우에 당신의 언어로 지원하는 다음과 같다:

convertTemperature (TempScale.CELSIUS, TempScale.FAHRENHEIT, 22)

다른 팁

언어에 따라 달라집니다.

일반적으로 난 사용하여 별도의 인수와 함께 열거.

의 경우 객체 지향적 언어로,다음 내가 권하고 싶 온도 클래스로 온도가 내부적으로 저장되 그러나 당신이 좋아하고 그런 다음 기능을 출력에서 어떤 단위로 필요하다:

temp.섭씨();//반품의 온도체 temp 에서 섭씨

에 쓰는 경우 이러한 디자인,제가 생각하는 자"가 필요한 경우 내가 add an extra 단위는 것이 무엇인 디자인을 만들 것 그것이 쉽게 그렇게 할까?" 이렇게,나는 결론에 도달하는 열거형 쉬운 것이 다음과 같은 장점이 있습니다.

1)추가하는 새로운 값을 쉽습니다.2)나는 일을 피 문자열 비교

그러나,당신은 어떻게 쓸 변환 방법?3p2 6.그래서 그 의미가 있는 6 개의 다른 조합의 섭씨,화씨,그리고 켈빈이다.무엇을 원하는 경우를 추가하는 새로운 온화한 형식"foo"?는 것을 의미 4p2 12!두 개의 더 많은?5p2=20 조합이다.세 더 많은?6p2=30 합니다!

빠르게 볼 수 있는 방법을 각각의 추가 수정 작업에 필요한 더 많은 변화하는 코드입니다.이러한 이유로 하지 않아요 직접 전환!대신에,내가 할 중급 변환입니다.나는 하나를 선택하는 온도,말 켈빈이다.처음에,난로 변환하여 켈빈이다.나는 그 변환 켈빈을 원하는 온도.네,그것이 결과에서 추가 계산이 됩니다.그러나,그것은 scalling 코드 톤이 더 쉽습니다.추가 추가하는 새로운 온도 단위는 항상 결과에 두 가지 새로운 수정 코드입니다.쉽습니다.

몇 가지:

  • 나는 열거된 형식을 사용하는 구문 검사기 또는 컴파일러를 확인할 수 있습이 아닌 문자열이 될 수 있는 잘못 입력.에서 의사 PHP:

    define('kCelsius',0);define('kFarenheit',1);define('kKelvin',2);$a=ConvertTemperature(22,kCelsius,kFarenheit);

또한,그것은 보인다 더 자연스럽게 배치하는 것은 당신이에서 작동,이 경우에는 온도 변환할 수 첫째.그것은 논리적 순서 당신의 매개변수(변환--무엇인가?니까?는가?) 따라서 도움이 됩 니모닉.

귀하의 기능을 훨씬 더 강력하는 경우에 당신은 첫 번째 방법을 사용합니다.추가해야 하는 경우 또 다른 규모의 하나 이상의 매개 변수 값을 처리합니다.에서 두 번째 방법을 추가하여 규모를 추가하는 것으로 많은 값으로 당신은 이미 저울에서 목록,시간 2.(예를 들어,추가 K C,F,당신을 추가해야의 K-C,K-F,C-K,C-F)

괜찮은 방법으로 구조화하는 프로그램하는 것이 먼저 변환에 오는 어떤 임의로 선택한 중간 규모로,그리고 다음에서 변환하는 중간 규모에게 보내는 규모입니다.

더 좋은 방법이 될 것이 작은 라이브러리의 슬로프를 가로채에 대한 다양한 규모,보이는 숫자에 대해 들어오고 나가는 척 하고 계산서 하나의 일반적인 단계입니다.

에서는 C#(및 아마 Java)가장 좋은 것을 만들기 온도 클래스 저장하는 온도 개인적으로 섭씨(또는)그는 섭씨로,화씨,그리고 켈빈는 속성의 모든 변환을 위해 당신에 자신의 설정 문?

따라 얼마나 많은 변환할 것입니다.아마 중 하나를 선택 매개변수로 주어진 enum:이를 고려한 확장된 버전의 변환입니다.

enum Conversion
{
  CelsiusToFahrenheit,
  FahrenheitToCelsius,
  KilosToPounds
}

Convert(Conversion conversion, X from);

당신은 지금 온전한 유형에서 안전의 포인트 전화 한 줄 수 없습니다 올바르게 입력한 매개 변수는 잘못된 런타임의 결과입니다.대안을 고려.

enum Units
{
  Pounds,
  Kilos,
  Celcius,
  Farenheight
}

Convert(Unit from, Unit to, X fromAmount);

입력 할 수 있습니다 내가 안전하게 전화

Convert(Pounds, Celcius, 5, 10);

그러나 결과가 의미,그리고 당신은에서 런타임 오류가 발생합니다.그렇다,나는 당신만을 다루는 온도에서는 순간,그러나 일반적인 개념전(난 믿는다).

나는 선택

예를 들어 1-별도의 매개변수:기능 convertTemperature("섭씨","화씨",22)

그렇지 않으면에서 함수를 정의할 수 있을 분석하"c-f"로"섭씨"및"화은"어쨌든 얻을 필요한 변환 스케일,를 얻을 수 있는 지저분하다.

만약 당신이 뭔가를 제공과 같은 구글의 검색 상자에게 사용자는 편리한 바로 가기 좋아요"c-f"좋은 것입니다.아래에,하지만,나는 변환"c-f"로"섭씨"및"화씨에서"외부의 함수를 호출하기 전에 convertTemperature()한다.

이 경우에는 하나의 매개 변수를 보이는 완전히 모호;

변환 기능을 온도하나 규모 하기 다른 규모.
IMO 그것은 자연을 통과하는 소스 및 대상 저항으로 별도의 매개 변수입니다.나는 확실히 시도하지 않으려면을 파악하는 형식으로의 첫 번째 인수로 합니다.

을 열거의 온도 유형을하고 전달에 2 개의 매개변수 규모.무언가가 다음과 같(c#):


public void ConvertTemperature(TemperatureTypeEnum SourceTemp,
                               TemperatureTypeEnum TargetTemp, 
                               decimal Temperature)
{}

나는 항상에 대한 경계에 사용하는 방법을 해결하기 위해 개체를 내 프로그래밍 문제입니다.난 이미 난 더 OO 때보다 나만의 기능을 사용하여 문제를 해결하기하지만,남아있는 것을 볼 수 있습니다.

C#

interface ITemperature
{
     CelciusTemperature ToCelcius();
     FarenheitTemperature ToFarenheit();
}

struct FarenheitTemperature : ITemperature
{
    public readonly int Value;
    public FarenheitTemperature(int value)
    {
        this.Value = value;
    }

    public FarenheitTemperature ToFarenheit() { return this; }
    public CelciusTemperature ToCelcius()
    {
        return new CelciusTemperature((this.Value - 32) * 5 / 9);
    }

}

struct CelciusTemperature
{
    public readonly int Value;
    public CelciusTemperature(int value)
    {
        this.Value = value;
    }

    public CelciusTemperature ToCelcius() { return this; }
    public FarenheitTemperature ToFarenheit()
    {
        return new FarenheitTemperature(this.Value * 9 / 5 + 32);
    }
}

테스트 및 일부:

        // Freezing
        Debug.Assert(new FarenheitTemperature(32).ToCelcius().Equals(new CelciusTemperature(0)));
        Debug.Assert(new CelciusTemperature(0).ToFarenheit().Equals(new FarenheitTemperature(32)));

        // crossover
        Debug.Assert(new FarenheitTemperature(-40).ToCelcius().Equals(new CelciusTemperature(-40)));
        Debug.Assert(new CelciusTemperature(-40).ToFarenheit().Equals(new FarenheitTemperature(-40)));

예제는 버그가 이에 접근을 방지:

        CelciusTemperature theOutbackInAMidnightOilSong = new CelciusTemperature(45);
        FarenheitTemperature x = theOutbackInAMidnightOilSong; // ERROR: Cannot implicitly convert type 'CelciusTemperature' to 'FarenheitTemperature'

추가 켈빈 변환은 왼쪽으로는 운동입니다.

그런데,그것은 필요가 없다 더 많은 작업을 구현하는 세 가지-매개 변수는 버전으로,제안서에서 질문 문입니다.

이들은 모두 선수,그래서 당신은 당신을 구현할 수 있습 같은 것

float LinearConvert(float in, float scale, float add, bool invert);

마지막 bool 음을 나타냅 수행하려는 경우 앞으로 변형 또는 역습니다.

내에서의 변환 기술할 수 있습 확장/추가 쌍 X->켈빈이다.할 때 얻을 요청하는 형식으로 변환 X Y 할 수 있는 첫 번째 실행 X->켈빈,그 후 K->Y 에 의해 반전 Y->켈빈 프로세스(내리고 마지막 bool 을 LinearConvert).

이 기술은 당신이 무언가가 다음과 같이 4 라인의 실제 코드에서 변환하는 기능,그리고 한 조각의 데이터에 대한 모든 형식으로 변환해야 합니다.

비슷한@Rob@wcm 및@David 설명...

public class Temperature
{
    private double celcius;

    public static Temperature FromFarenheit(double farenheit)
    {
        return new Temperature { Farhenheit = farenheit };
    }

    public static Temperature FromCelcius(double celcius)
    {
        return new Temperature { Celcius = celcius };
    }

    public static Temperature FromKelvin(double kelvin)
    {
        return new Temperature { Kelvin = kelvin };
    }

    private double kelvinToCelcius(double kelvin)
    {
        return 1; // insert formula here
    }

    private double celciusToKelvin(double celcius)
    {
        return 1; // insert formula here
    }

    private double farhenheitToCelcius(double farhenheit)
    {
        return 1; // insert formula here
    }

    private double celciusToFarenheit(double kelvin)
    {
        return 1; // insert formula here
    }

    public double Kelvin
    {
        get { return celciusToKelvin(celcius); }
        set { celcius = kelvinToCelcius(value); }
    }

    public double Celcius
    {
        get { return celcius; }
        set { celcius = value; }
    }

    public double Farhenheit
    {
        get { return celciusToFarenheit(celcius); }
        set { celcius = farhenheitToCelcius(value); }
    }
}

나는 완전히 돼지 하나의 방향으로 또는 다른입니다.당신이 쓸 수 있는 미니하는 언어는 어떤 종류의 변환과 같은 단위 가:

$ units 'tempF(-40)' tempC
    -40

또는 각 기능을 사용하 같은 최근의 변환::온 펄 모듈:

use Convert::Temperature;

my $c = new Convert::Temperature();

my $res = $c->from_fahr_to_cel('59');

그러나 제공하는 최대 중요한 포인트---지 언어를 사용하여 이미 있는 변환 기능을 가지고 있는가?그렇다면,무엇 코딩 convention 를 사용하나요?그래서 만들어진,그것은 최고의 것을 따라 예 atoi strtod 라이브러리 함수(이 검증되지 않은):

double fahrtocel(double tempF){
    return ((tempF-32)*(5/9));
}

double celtofahr(double tempC){
    return ((9/5)*tempC + 32);
}

에서 이 게시물을 작성,내가 가로질러 매우 흥미로운 게시물 에 사용하는 이맥스 변환합니다.리는 이 항목은 사용하는 하나의 기능-전환당 스타일입니다.또한,전환될 수 있는 아주 어둡습니다.내가하는 경향이 날짜를 사용하여 계산 SQL 기 때문에 그것을 가능성이 보인다 거기에 많은 버그에는 코드입니다.미래에 나는 모양으로 사용하 emacs.

여기에 내에는 이를 사용하여(PHP):

function Temperature($value, $input, $output)
{
    $value = floatval($value);

    if (isset($input, $output) === true)
    {
        switch ($input)
        {
            case 'K': $value = $value - 273.15; break; // Kelvin
            case 'F': $value = ($value - 32) * (5 / 9); break; // Fahrenheit
            case 'R': $value = ($value - 491.67) * (5 / 9); break; // Rankine
        }

        switch ($output)
        {
            case 'K': $value = $value + 273.15; break; // Kelvin
            case 'F': $value = $value * (9 / 5) + 32; break; // Fahrenheit
            case 'R': $value = ($value + 273.15) * (9 / 5); break; // Rankine
        }
    }

    return $value;
}

기본적으로 $input 값 변환 표준 섭씨 규모와 그 변환로 다시 돌아 $output 스케일 하나의 기능을 모두를 지배합니다.=)

나의 투표 두 개의 매개 변수를 변환을 위해 유형에 대해 하나의 값으로(첫 번째 예에서).내가 사용하는 것이 대신에 열거의 문자열입니다,그러나.

사용 열거는 경우에,당신의 언어로 그것을 허용한 단위 사양입니다.

말하고 싶지만 코드를 내 것으로 쉽게 두.나는 테이블과 함께 사전을 추가,multiplty,그리고 포스트를 추가,그리고 실행 가치를 통해 품목에 대한 하나의 유닛을 통해 다음 항목에 대한 다른 장치에 역행합니다.기본적으로 변환하는 입력한 온도는 일반적인 기본 값을 내고 그 다음에 밖으로 다른 단위입니다.이 기능을 것 테이블 기반으로 합니다.

나는 어떤 방법을 허용 여러 개의 답변이 있습니다.에 기반한 모든 사람의 권고 생각됩니다으로 여러 매개변수,문자열 변경을 열거형/상수,이동할 값을 변환하는 첫 번째 위치에서 매개 변수 목록입니다.내부 기능을 사용하여 켈빈으로 일반적인 중간.

이전에 작성했기 때문에 개별적 기능에 대한 각각의 변환 및 전반적인 convertTemperature()함수 단 래퍼로 중첩된다.쓰고 있어요 모두에서 고전 ASP 및 PHP 지만,나를 떠나고 싶어하는 질문을 열고 어떤 언어입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top