ProgramingTip

자바 프로그래머로서 무엇을 찾아야합니까?

bestdevel 2020. 11. 28. 10:14
반응형

자바 프로그래머로서 무엇을 찾아야합니까?


내 프로그래밍 배경의 대부분은 Java에서 대부분의 프로그래밍을 사용합니다. 그러나 저는 직장에서 일부 부수적 인 프로젝트를 위해 Python을 배우기 시작하고 가능한 한 Java 배경과 독립적으로 배우고 싶습니다. 즉, Python으로 Java를 프로그래밍하고 싶지 않습니다. 주의해야 할 사항은 무엇입니까?

예 -Python에서 발견 할 때를 발견 보면 함수 (예 : 목록)의 기본 변경 가능한 매개 변수가 간단하게 계속 사실을 기억했습니다. 이것은 자바 프로그래머로서 저에게 반려이 많았던 머리를 돌리기가 어. ( 예제를 이해하지 않는 경우 여기여기를 참조 하십시오 .)

누군가 가이 목록을 제공하는데 도움이됩니다. 누구든지 자바 프로그래머가 어떻게 기술을 오용하는 경향이 있는지에 대한 다른 예가 있습니까? 아니면 자바 프로그래머가 잘못 가정하거나 이해하는 데 쓰는 사람이 있습니까?

편집 : 좋아, 내가 링크 한 기사에서 이유에 대한 개요는 답변에서이를 방지하기 위해 (Bill the Lizard가 제안한대로). (제가 실수를했다면 저에게 알려주세요 저는 . 방금 파이썬으로 시작 했을 뿐이 므로 모든 개념을 완전히 이해하지 못할 수도 있습니다 그리고 면책 조항 -.은 이것들 매우 간단 할 것이므로 이해가 안된다면-link를 확인하십시오.)

  • Java의 정적 메서드는 Python 클래스 메서드로 변환되지 않습니다.
  • Java의 스위치 문은 Python의 해시 테이블로 변환됩니다.
  • XML을 사용하지 않음
  • 게터와 세터는 사악합니다 (헤이, 나는 단지 인용하고 있습니다 :))
  • 코드는 종종 자바에서 필요한 악 (예 : 메소드 오버로딩)이지만 Python에서는 있습니다.

(그리고이 질문이 흥미 롭다면 어쨌든 링크를 확인하세요. :) 꽤 좋습니다.)


  • 모든 것을 수업에 넣지 . 내장에 내장 된 목록과 사전이 당신을 멀리 데려 갈 갈 것입니다.
  • 하나의 클래스를 유지하는 것에 대해 걱정하지 않습니다 . 클래스가 아닌 목적에 따라 모듈을 나눕니다.
  • 인터페이스가 아닌 동작에 상속을 사용하십시오 . 일반 "make_sound"메소드를 생성하지 "Dog"및 "Cat"에서 상속 할 "Animal"클래스를 작성하지 않습니다.

다음과 같이하십시오.

class Dog(object):
    def make_sound(self):
        return "woof!"

class Cat(object):
    def make_sound(self):
        return "meow!"

class LolCat(object):
    def make_sound(self):
        return "i can has cheezburger?"

참조 된 기사는 쉽게 잘못 인용되거나 오해 될 수있는 좋은 조언이 있습니다. 그리고 몇 가지 나쁜 조언.

Java는 각각 두십시오. 새로 시작하십시오. "[자바 기반] 본능을 믿지 믿지". "반할 것"이라고 말하는 것은 모든 프로그래밍 분야에서 나쁜 습관입니다. 새로운 언어를 해독 새로 시작하고 습관을 버리십시오. 의 직관이 당신 있어야 잘못.

언어가 나열된 . 정렬 된 구문 구문이 다른 언어가되고 간단한 번역이있을 것입니다. 단순한 번역이 없기 때문에 단순한 매핑이 없습니다. 이는 직감이 도움이되지 않고 있음을 의미합니다.

  • "Java의 메소드 메소드는 Python 클래스로 변환되지 않습니다." 이런 종류의 것은 정말 철저한 제한 도움이되지 않습니다. 거기에는 staticmethod 데코레이터가 있습니다. 또한 Java에는 동등한 클래스 메소드 데코레이터가 없습니다.

    이 요점 인 BTW는 클래스의 모든 것을 객관적으로 래핑하지 않는 것에 대한 더 유용한 조언도 포함되어 있습니다. "Java 메소드 메소드의 관용적 번역은 일반적으로 모듈 수준의 함수입니다."

  • Java의 Java switch문은 여러 가지 방법으로 구현할 수 있습니다. 첫째, 무엇이며 일반적으로 if elif elif elif구성입니다. 이 기사는이 점에서 도움이되지 않습니다. 확신하는 경우 Python 사전을 값에서 코드 블록으로의 약간 더 빠른 매핑으로 사용할 수 있습니다. 맹목적으로 스위치를 사전으로 번역하는 것은 정말 나쁜 조언입니다.

  • XML을 사용하지 않습니다. 됬습니다. 맥락에서 이는 유연성을 추가하기 위해 XML에 의존하지 않는다는 것을 의미합니다. Java는 XML로 내용을 설명하는 데 의존합니다. 예를 들어 WSDL 파일은 코드 검사에서 분명한 정보를 반복합니다. Python은 모든 것을 XML로 다시 작성하는 대신 내성에 의존합니다.

    그러나 Python에는 뛰어난 XML 처리 라이브러리가 있습니다. 낫의.

  • 게터 및 세터는 자바에서 필요한 방식으로 파이썬에서 필요 하지 않습니다 . 첫째, Python에서 더 나은 내성이 있기 때문에 동적 Bean을 만드는 데 도움이되는 getter 및 setter가 필요합니다. (이를 위해 collections.namedtuple 을 사용 합니다 ).

    그러나 속성과 방식은 getter (및 setter)를 제공 하는 속성 데코레이터가 있습니다. 요점은 기본이 네이 키드 속성을 선호한다는 것입니다. 필요한 경우 간단한 속성이있는 것처럼 보이도록 getter와 setter를 묶을 수 있습니다.

    또한 Python에는 속성이 충분히 정교하지 않은 경우 설명자 클래스가 있습니다.

  • 코드 복제는 종종 자바에서 필요한 악 (예 : 메소드 오버로딩)이지만 Python에서는 있습니다. 옳은. Python은 메서드 오버로딩 대신 주장 인수를 사용합니다.

    글 머리 기호는 종료에 대해 계속해서 이야기했습니다. 기본 인수 값을 현명하게 사용하는 간단한 조언 도움이되지 않습니다.


강력한 자바에서 익숙한 한 엄격한 개인 정보 보호입니다. 찾을 수없는 이것은 것이기 때문에주의해야 우리 할 것이 아닙니다 . 대신 Python은 Java보다 훨씬 더 투명하고 쉽게 검사 할 수 있습니다. 이것은 "우리 모두 성인이 여기에 동의한다"는 철학에 속합니다. "공개되지 않은"방법 등의 우발적 인 사용을 방지하는 데 도움이되는 데 도움이되는 몇 가지 규칙과 언어 언어가 표시되는 것, 정보 은닉에 대한 전체적인 사고 방식은 동일합니다.


내가 생각할 수있는 가장 큰 것은 덕 타이핑을 이해하지 못하거나 완전히 활용하지 않는 것입니다. Java에서는 매우 명시적이고 자세한 유형 정보를 미리 지정해야합니다. 파이썬에서 타이핑은 동적이고 대부분 암시 적입니다. 철학은 명목상의 유형보다 더 높은 수준에서 프로그램에 대해 생각해야한다는 것입니다. 예를 들어 Python에서는 대체 가능성을 모델링하는 데 상속을 사용하지 않습니다. 덕 타이핑의 결과로 대체 가능성이 기본적으로 제공됩니다. 상속은 구현을 재사용하기위한 프로그래머의 편의 일뿐입니다.

비슷하게, 파이썬 관용구는 "용서를 구하고 허가를 구하지 마십시오"입니다. 명시적인 타이핑은 악한 것으로 간주됩니다. 매개 변수 특정 유형인지 미리 확인하지 마세요 . 매개 변수로 수행해야하는 작업을 수행하십시오. 적절한 인터페이스를 따르지 않으면 매우 명확한 예외가 발생하고 문제를 매우 빠르게 찾을 수 있습니다. 누군가가 명목상 예상치 못한 유형의 매개 변수를 전달했지만 예상 한 것과 동일한 인터페이스를 가진다면 무료로 유연성을 얻을 수 있습니다.


Java POV에서 가장 중요한 것은 모든 것에 대한 클래스를 만들지 않아도 괜찮다는 것입니다. 절차 적 접근 방식이 더 간단하고 짧은 상황이 많이 있습니다.

다음으로 중요한 것은 객체 유형 이 수행 할 수있는 작업을 제어 한다는 개념을 극복해야한다는 것입니다 . 오히려 코드 는 어떤 객체가 런타임 에 지원할 수 있어야하는지 제어 합니다 (덕 타이핑 덕분입니다).

아, 그리고 가능한 한 네이티브 목록과 사전 (사용자 지정 하위 항목이 아님)을 사용하십시오.


Python에서 예외가 처리되는 방식은 Java에서 처리되는 방식과 다릅니다. 자바에서는 예외적 인 조건에 대해서만 예외를 사용하는 것이 좋지만 Python에서는 그렇지 않습니다.

Python에서는 Iterator와 같은 것들이 예외 메커니즘을 사용하여 더 이상 항목이 없음을 알리지 만 이러한 디자인은 Java에서 좋은 방법으로 간주되지 않습니다.

Alex Martelli가 자신의 저서 Python in a Nutshell 에서 언급했듯이 다른 언어 (및 Java에 적용 할 수있는)를 사용한 예외 메커니즘은 LBYL (Look Before You Leap)입니다. 작업을 시도하기 전에 미리 확인하는 것입니다. 작업이 잘못되었습니다.

Python과 마찬가지로 접근 방식이 EAFP 인 경우 (허가보다 용서를 구하는 것이 더 쉽습니다)


"모든 것에 클래스를 사용하지 마라"에 대한 코롤 러리 : 콜백.

콜백을 수행하는 자바 방법은 (예를 들어 콜백 인터페이스를 구현하는 객체 전달에 의존하고 ActionListener그와 actionPerformed()방법). 파이썬에서는 이런 종류의 것이 필요하지 않습니다. 직접 메서드 나 로컬로 정의 된 함수를 전달할 수 있습니다.

def handler():
   print("click!")
button.onclick(handler)

또는 람다 :

button.onclick(lambda: print("click!\n")) 

참고 URL : https://stackoverflow.com/questions/2339371/as-a-java-programmer-learning-python-what-should-i-look-out-for

반응형