암시 적 및 명시 적 용어는 처음들을 때 익숙해집니다. 당신이 프로그래밍의 관점에서 그들을들을 때 그것이 당신에게 정확히 무엇을 의미합니까? 한 가지 방법이 다른 방법보다 낫습니까? 여기서 우리는 이러한 각각의 아이디어를 제공 예를 일부 디자인 패턴을 하는 혜택을에서 올 수 있습니다.

용어

에서 프로그래밍,암시적이 나타나기 위하여 자주 사용하는 뭔가가 당신을 위해 수행하여 다른 코드고 있습니다., 명시 적 명시 적으로 수행 할 지침을 작성하여 갖고 싶은 변화를 달성하기위한 수동 접근 방식입니다. 더 작은 그림에서 암시 적 및 명시 적 은 종종 당신이 그것을 가질 유형에 유형을 캐스팅하는 데 사용되는 용어입니다. 더 큰 그림에서,당신은 당신에 대해 이야기 할 수있 협약을 통해 구성 규칙은 무엇인가 암시적으로 수행을 위해 당신에 코드 또는 기본 프레임워크 및 구성은 단순히 명시적인 설정합니다.,

이에 차이가 있의 적합성이나 혜택을 사용하거나 프로그래밍 언어에 따라 질문에는지 여부와 언어가 입력한 정적으로 또는 동적으로 입력한다. 또한 런타임 또는 컴파일 중에 사물을 추론 할 수 있는지 여부에 따라 다릅니다. 기 때문에,이러한 요소를 만드는 클레임을 제기하는 하나의 방법보다 더 나은 다른만 가능하게 될 사실에 좁은 상황을 고려하는 디자인을 위한 프로그래밍 언어와 프로그램에서 질문입니다.,

의 예를 암시적이고 명시적인 유형 주물 C 은 다음과 같습니다:

int implicit;implicit = 4.5;int explicit;explicit = (int)4.5; 

여기에는 변수 이름을implicitexplicit정의된 형식으로int. 일단 값을 지정4.5암시 버전을 컴파일러 변환 어떤 것은 일반적으로 부유물 혹은 더블 형식을 정수를 반면 명시적으 버전은 명시적으로 캐스팅 정수의 사용으로(int)는 무엇을 캐스팅하는 유형입니다.,

정적으로 입력한 언어

에 정적으로 형식 언어와 같은 녹는 대부분의 가치 창출 및 할당 명시적인 형식 주석을 사용하여 요구사항에 대한 예외 어디에 있든 컴파일러를 추정할 수 있다. 다음은 Rust 에서 명시 적 및 암시 적 유형을 보여주는 예입니다.

fn add_one(input: u8) -> u8 { input + 1}let four = add_one(3);

여기에서는 방법을add_one이에 대해 명시적 입력 입력 및 출력 형식입니다., 수1추가되 여기는 암시적으로 만든u8번호에서 컴파일 시 컨텍스트로는 데 도움이 형식을 유추고 또한u8만 구현되어 함께 작동하는u8숫자입니다. 마지막 줄은 메서드 자체가 반환 될 형식을 정의하기 때문에 암시 적으로u8로 입력됩니다.

녹에서 유추 할 수있는 것은 제네릭의 사용으로 꽤 인상적입니다. 그러나 추론의 사용은 컴파일 타임에 알 수있는 것들로 제한됩니다., 컴파일 타임에 알 수없는 경우 지정 시점에 명시 적으로 유형을 정의해야합니다. 다음과 같은 방법을 정의

use std::ops::Add;fn add_both<T: Add>(a: T, b: T) -> T::Output { a + b}

여기에는T될 수 있는 모든 유형을 구현하는 특성을Add. T::Output입력된 경우 이 추가 특성에 대해 정의된 특정 유형은 일반적으로 동일한 유형으로T에서 자신 경우입니다. 이제 두 개의 숫자를 매개 변수로 제공하면 컴파일러가 유형을 추론 할 것입니다.,

let x = add_both(3 , 4 ); // implicit typelet y: u8 = add_both(3u8 , 4u8 ); // explicit typelet z: u32 = add_both(3u32, 4u32); // explicit type

실행할 때 위의 코드x유추하는 유형i32. yz예력이 필요 매개변수 유형을 알려진에 제공할 경우 기능으로 추정한T::Output지 않는 반드시 같은 무엇으로도 유추하기로 한다. 그것은 기본적으로i32그 다음에 할당하는i32u8또는u32은 완전히 잘못된 것입니다.,

동적으로 입력한 언어

이와 동적으로 입력한 언어야에 대한 걱정을 덜 형식,per se,에 대한 자세한 암시적 또는 명시적 객체 또는 동작입니다. 모델 코드의 주위에있는 개체를 같은 동작은 무엇으로 알려진 오리가 입력되는 높은 도메인의 생각에 객체-지향 프로그래밍 어디에 처리하는 개체는 암시적입니다. 반면 특정 객체 클래스 주변의 코드를 모델링하는 것은 명시 적 또는 암시 적 타이핑을 사용하는 것과 훨씬 비슷합니다., 그러나 때 당신은 어떠한 종류의 개체를 입력으로,다음의 코드는 해당 섹션이나 핸들을 다른 개체로 명시적으로 또는 손으로 그 책임을 벗습니다.

명확히하기 위해 다른 종류의 것을 처리하기 위해 코드를 작성할 때 명시 적 코드를 작성하는 것입니다. 그러나이 동일한 코드가 이미 작성되었고 간단한 메소드 호출로 재사용 할 때,이 새로운 컨텍스트에서의 동작은 암시 적입니다. 암시적인 것은 마치 자동으로 수행되고 현재 범위 밖에서 처리됩니다.,

루비에서 대부분의 유형은 명시 적 또는 암시 적 변환을위한 디자인을 가지고 있습니다. 아이디어가 암시적 변환 방법을 사용하는 의미에서 묵시적 컨텍스트가 명시적 변환을 의미가 있 개발자가 작성하는 인라인에서 훨씬 더 많은 듯하다. 이것을 예를 통해 보여 드리겠습니다.

# explicit"4".to_i + "5".to_i# => 9# implicitclass Seven def to_int 7 endendArray.new(Seven.new)# => 

여기서 명시적인 예는것은 매우 분명 리더는 우리를 변환하는String체를Integer체 및 공연한 두., 고 암시적 예상치 않은 리더로Array.new방법을 암시적으로 호출 to_int 방법에는 무엇이든 매개변수 그것은 주어집니다. 정수 클래스에는 단순히 self 를 반환하는 각 인스턴스에 정의 된 메소드 to_int 가 있습니다. 당신이42.to_int를 쓰면 단순히42를 되 돌리면됩니다. 메서드 호출에 대한 입력 가드로 암시 적 변환을 사용하는이 사용은 설계 상 유형 안전을위한 훌륭한 설계입니다. 여기에to_int를 정의하지 않는 잘못된 종류의 객체를 입력으로 제공하면 어떻게됩니까?,

Array.new("32")# TypeError (no implicit conversion of String into Integer)

뿐만 아니라 그것은 실패하지만 그것은 우리에게 도움이 되는 메시지가 암시적 변환을 시도되었고 알려줍니다 클래스의 객체에 주어진 클래스의 객체을 기대합니다. Ruby 의 암시 적 변환 방법은이 객체가 실제로 당신이 기대하는 것이라고 말하는 방법입니다. 그리고 명시 적 변환은 단순히 예상되는 유형으로의 변환을 만드는 것입니다.

Ruby 는 많은 핵심 객체에 대해 암시 적 및 명시 적 옵션을 가지고 있습니다.,

루비에는 또한 몇 가지는 클래스 클래스와는 방법 중 하는 암시적으로 변환 또는 반품 전무는 방법 이름은try_convert.

우리가 따를 수 있습니다 루비의 예Array.new고 좋은에 대한 보호의 종류를 입력 매개 변수는 우리에 의해 주어진 디자인 암시적 변환을 위해 우리 자신의 사용자 정의 형식입니다. 이 예를 들어,이후to_f은 명시적으로 변환을 떠 수 루비에서 우리가 사용하는as_으로 접두사를 대신to_., 다음은 안전을위한 패턴으로서의 암시성에 대한 기본 예입니다.

이제 도움이 될 것 다른 개발자가 사용하는Bar등을 통과하지 않는것으로 호환되지 않는 매개 변수입니다. 그것은 루비 언어 내에서 규칙을 따르고 개발자가 더 도움이되는 오류로 이해하는 것이 훨씬 쉬워야합니다. 이 있을 때 다른 객체를 변환로 Foo 객체는 다음을 정의할 수 있는as_f방법에 대해 명시적 변환을 사용하는 개발자는 새로운 객체를 명시적인 사용에Bar.new(Baz.new.as_f)., 이를 통해 코드에서 작동합니다 그래서 많은BarFoo은 이미 노력하고 있습니다.

요약

의 행위를 암시적이고 명시적인 코딩 및 암시적이고 명시적인 코드에 의해 정의의 컨텍스트의 실행을 추가적인 동작이나 설정을 입력/캐스팅. 특히 암시 적 또는 명시 적 메소드는 사용하려는 컨텍스트에 의해 정의됩니다. 암시 적 코드는 사물을 단순하게 유지하는 것처럼 사물이 잘 명명되면 아주 좋은 경험이 될 수 있습니다.,

그러나 암시적 코드,코드의 일을 뒤에 당신을,또한 어려운 문제를 해결하는 완료되면 잘못입니다. 코드는 명시적 코드를 명확한 당신이 그것을 볼 때로의 세부 사항 수행되는 무엇이 이미 배치하기 전에 당신과 당신지가 문제를 추적하는 다른 곳에,그러나 일반적으로 많은 의미가 더 작업에 쓰기. 그 자체로는 압도적이 될 수 있으므로 둘 사이의 적절한 균형을 찾는 것이 종종 최선의 해결책입니다. 해야 할 때 명시 적이어야하며 디자인 및 이름 지정 개념이 이해하기 쉬운 경우 암시 적이어야합니다., 그것은 더 편리한 개발 경험을 만들 것입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다