IDE가 코드로 이끌어 낼 수있는 가장 인상적인 트릭은 무엇입니까? [닫은]


18

최신 IDE에는 코드 작성, 리팩토링, 검색에 도움이되는 많은 수의 트릭이 있습니다. 그것들은 모두 매우 도움이되지만, 그들 중 어느 것도 실제 "마법"처럼 보이지 않고 "와우! 어떻게 알아 냈습니까?"

당신이 그것을 처음 보았을 때 인상적인 IDE 코드 자동화 (또는 다른) 기능의 이름을 지정할 수 있습니까?


3
좋은 질문입니다. 더 많은 답변을보고 싶습니다 ... 바운티!
Tamara Wijsman

이것이 대답이되어야할지 모르겠지만 왜 IntelliJ IDEA에 대한 언급이 보이지 않습니까?
Mark C

5
실제 프로그래머는 나비를 사용합니다.
rightfold

내가 버그를 만들지 못하게한다;)
Travis Christian

답변:


29

거꾸로 디버깅

Visual Studio 2010 (및 현재 2012)을 사용하면 IntelliTrace를 사용 하여 뒤로 디버깅 할 수 있습니다 .

F10을 한 번 이상 누른 순간 디버깅을 다시 시작해야하는 순간을 다시는 다시 살아 나지 않아도됩니다.


2
아직 사용하지 않았지만 사용하고 싶습니다.
AShelly

나는 이것을 사용하지 않았지만 (RAD Studio for Delphi를 사용함) 꿈이 실현되는 것처럼 들립니다. (그러나 이것은이 질문에 대한 정답입니까? 코드 편집기 기능보다 디버거 기능입니다. IDE의 일부일 수도 있습니다.)
Andreas Rejbrand

+1000 : 매우 유용합니다.
Callum Rogers

COME FROM 명령이 있습니까? :)
Joonas Pulakka

2
문제는 당신이 단지 예를 들어, C ++와 MS 언어이 (관리) 및하지를 할 수 있다는 것입니다
열기 방법

16

코드 완성

당신이 보았던 모든 것이 텍스트 편집기라면, 이것은 인상적입니다


3
실제로 그렇게 인상적이지는 않지만 TAGS 파일을 분석하기 만하면됩니다.
대안

2
내가 좋아하는 것은입니다 ... 히피 - 확장이다 깊이 코드 완성보다 나에게 더 유용.
Paul Nathan

2
@mathepic 그리고 정확히 얼마나 많은 사람들이 알고 있습니까?
TheLQ

2
메인 프레임 이후 프로그래밍을 해왔다면 인상적입니다.
AShelly

4
여러분,이 답변에 호소력이 없다면 의견에 동의하지 않고 다른 답변에 투표하십시오. 주관적인 질문이므로 주어진 답변도있을 것입니다.
JBR 윌킨슨

16

내가 원하는 변수를 추측 할 수있는 ReSharper의 능력은 저를 놀라게합니다. 다음은 매우 간단한 예이지만 아이디어를 얻습니다.

대체 텍스트


1
실제로 본 적이없는 사람들을위한 몇 가지 예를 들어 주시겠습니까?
serg

9
만약 당신의 텍스트 편집기가 코드 작성에서 당신을 대신 할 수 있다면, 나쁜 소식이 있습니다 ...
P Shved

3
foreach(var matche in regex.Matches(str)). 또한 설정 matcheint로서 object가 아닌 Match, 매우 유용하지 않습니다.
Callum Rogers

1
@Callum : True MatchCollection입니다. 형식화되지 않은 컬렉션 이기 때문 입니다. 적절한 컬렉션을 위해 var훌륭하게 작동합니다. (여전히 마음에 들지 않습니다)
구성자

1
이것은 일식의 기능이기도합니다.
NimChimpsky

12

Eclipse의 리팩토링 도구를 처음 접했을 때 매우 감동 했습니다. 많은 양의 코드에서 메소드를 추출하고 (더 나은 디자인을 배우는 경우 일반적으로 발생하는) 기능은 매우 훌륭했습니다.


12

코드 버블. http://www.andrewbragdon.com/codebubbles_site.asp

코드 변경을 위해 제공하는 도구로는 Visual Studio와 Eclipse를 좋아하지만 Code Bubbles는 코드를 탐색하고 볼 수 있다는 점에서 정말 흥분됩니다. 안타깝게도 공개적으로 사용할 수 없습니다 =-{


2
와. 그 비디오 ... 나는 침을 흘리고있다. C ++에 사용할 수 있습니까?
sbi

와우 외에는 아무 말도 할 수 없습니다.
Icode4food

1
나는 현재의 GUI처럼하지 않지만 +1, 개념 자체가 ... 꽤 놀라운
타마라 Wijsman

정말 작동합니까? 코드의 일부가있는 작은 상자. 그것을 사용하려면 벽 크기의 모니터가 필요합니다.
IAdapter

나는 이것이 Emacs에서 결코 구현되지 않기를 바랍니다. 내 왼쪽 핑키는 그렇게 좋아하지 않을 것입니다.
rightfold

7

내가 들어 본 것 중 가장 인상적인 프로그래밍 환경은 Genera 운영 체제입니다.

윈도우 시스템에서 위젯을 클릭하고 소스 코드 및 항목의 문서를 완전히 읽을 수 있습니다. 동적 프로그래밍 언어 (Lisp)이므로 위젯 소스를 즉석에서 편집 할 수 있습니다.

Lisp Machine 세계의 ZMACS는 여전히 피어가없는 편집기 환경 인 Emacs보다 우수한 편집기라고합니다.


대학 이후의 첫 번째 컴퓨팅 작업은 (속을 사용하여) 상징적 워크 스테이션으로 작업했는데, 그 이유를 알 수 없었습니다.
FinnNk

3
아, 정교하게 해!
Mark C

네, Genera도 왜 따라 가지 못했는지 알고 싶습니다
Yazz.com

@ FinnNk : 아마도 당신은 정교한 수 있습니까?
Paul Nathan

6

프로그램의 구조를 시각적으로 보여줍니다 (프로그램 / 기능 / 루틴 //)

대체 텍스트


어떤 편집기입니까?
폴 나단


불운 ... (스크린 샷을 찍는 순간 메일을 받았습니다.) 그러나 이것은 고급 기능이 아닙니다. 물론, 그것은 아마도 매우 유용하지만 "감동적인"것은 아닙니다.
Andreas Rejbrand

@Andreas Rejbrand-안드레아스 죄송하지만 어떤 메일? 어떤 스크린 샷? 당신이 무슨 말을하는지 이해가되지 않습니다.
Rook

@ 루크 : 그는 대답의 이미지와 오른쪽 하단의 작은 파란색 상자에 대해 Outlook의 전자 메일 알림으로 보입니다. . .
Tim Goodman

4

ReSharper의 리팩토링 기능.전체 공개에서, Eclipse를 사용하는 Java가 한동안 이러한 유형의 기능을 가지고 있다고 생각하기 때문에 곡선 아래에있을 수 있지만 Java로 정기적으로 작업하지는 않습니다.

ReSharper가 Visual Studio에 추가하는 기능의 델타는 매우 뛰어납니다. 광고처럼 들리지만 ReSharper를 설치하지 않고 Visual Studio 설치를 다시 사용할 수 있다고 생각하지 않습니다.

더 일반적으로, 코드의미 론적 이해는 언젠가는 평범한 오래된 텍스트 편집기의 바지를 이길 것입니다. 이로 인해 "변수 찾기 사용"또는 "인라인 함수"또는 "관용적 패턴 사용 기회"등이 발생합니다.


직장에서 한 번은 "친구는 ReSharper없이 친구를 프로그램 할 수 없습니다"라고 들었습니다.
Frank Shearar

4

스몰 토크의 디버거 :

  • 전체 호출 스택에 대한 모든 액세스 권한 (해당 스택 3의 발신자 인이 객체의 인스턴스 변수는 무엇입니까?)
  • 디버거에서 테스트중인 코드를 편집하고 다시 시작한 후 아무 일도 일어나지 않은 것처럼 프로그램을 실행하십시오.

스몰 토크에서는 디버거 내에서 코드를 작성하는 데 대부분의 시간을 보내는 것이 일반적입니다.

(VA4J는 Visual Age for Smalltalk로 작성 되었기 때문에 메소드를 실행하고 잘못된 것을보고 변경하고 다시 Visual Age for Java로 응용 프로그램을 다시 시작하지 않고 메소드를 다시 실행하여 날아간 것을 기억합니다.)

스몰 토크의 메소드 파인더

Method Finder를 사용하면 "이 매개 변수를 가져 와서 결과를 얻기 위해 어떤 메시지를 보낼 수 있습니까?" 물어 보면 'abc'. 'def'. 'abcdeb'.알려줍니다 'abc' , 'def' --> 'abcdef'. 그것을 질문 #(0 1 2 3)과는 말한다 #(0 1 2 3) sum --> 6. * 발신자, 구현 자-모든 메시지 발신자 또는 해당 메시지를 구현하는 모든 객체를 찾을 수 있습니다.

(*) 런타임에 메시지 이름 만들기와 같은 작업을 수행하는 경우를 제외하고 : self perform: (#foo, #bar)자신에게 메시지를 보내십시오. #foobar이 경우 수행중인 작업을 알고 있으며 자신의 페타 드에 자신을 올리는 가능성을 신경 쓰지 않습니다.


4

Whyline

Java를 볼 때 Whyline for Java가 정말 감동했습니다. 텍스트뿐만 아니라 그래픽도 프로그램의 출력에 대해 질문 할 수있는 동적 분석 도구입니다. 예를 들어, "그 줄은 왜 빨간색입니까?" 또는 "페인트 메소드가 호출되지 않은 이유는 무엇입니까?"

프로그램을 계측하고 실행을 기록하여 작동합니다. 예를 들어, 재현 할 수있는 버그가 있다고 가정하십시오. Whyline으로 프로그램을 계측하고 Whyline에서 프로그램을 실행하여 버그를 재현 한 다음 프로그램을 종료하면 Whyline을 사용하여 실행 기록을 검사 할 수 있습니다.

이 녹음 및 재생은 새로운 것이 아니지만 Whyline이 구현하는 방식은 매우 매끄 럽습니다. 특정 이벤트에 따라 기록을 볼 수 있습니다 (예 : 마우스 끌기 이벤트에만 집중하거나 키 다운 이벤트에만 집중). 또한 출력을 프로그램의 인쇄 된 부분과 연관 시키므로 출력에서 ​​코드로 이동할 수 있습니다.

작동하기 위해 프로그램 슬라이싱을 사용하므로 실제로 관련된 코드 부분에 집중할 수 있습니다. CMU는 이제 그것에 대한 특허를 가지고 있으며, 그들의 계획이 무엇인지 모르겠지만 프로덕션에서 더 많이 볼 수 있기를 바랍니다. 그것은 메모리 호그이지만 프로토 타입이기 때문에 향상 될 수 있습니다.

온라인에서 데모를 볼 수 있지만 전체 경험을 얻으려면 직접 사용해보십시오. 온라인 데모는이 아이디어를 판매합니다.


3

필자가 본 가장 인상적인 IDE 기능은 SyncEdit 이며 AFAIK는 Delphi에서만 사용할 수 있습니다.


이것은 단지 멤버 이름 변경이 아닙니까? 이클립스는이를 제자리에서 수행합니다. 편집 : 아, 알다시피, 당신은 선택 내에서 그것을 할 수 있습니다.
Matt Olenik

1
이클립스도 가지고 있습니다 (항상 사용하십시오). 매우 유용합니다. 마법-확실하지 않습니다.
serg

@ 서지 : 오, 이클립스도 가지고 있습니까? 모르겠다. Java를 사용하지 않습니다. 나는 VS에 그것을 가지고 있지 않다는 것을 알고있다.
Mason Wheeler

@Matt : 선택 내에서 수행 할 수 있으며 선택 내에서 수행 할 수 있기 때문에 원하는만큼 파일 전체에서 수행 할 수 있습니다. 리팩토링 파서가 멤버 이름 변경에 적용하는 범위 또는 기타 제약 조건에 의해 제한되지 않습니다.
메이슨 휠러

넷빈즈도 마찬가지입니다. 일반적으로 ctrl-r.
Alan Pearce

2

IDE에서보고 싶은 것은 다음과 같은 기능입니다.

  • 익숙한 방식으로 코드를 표시합니다 (실제 형식의 형식과 무관)
  • 코드로 테이블 (예 : 셀 값을 읽을 수있는 Excel 스프레드 시트 sheet[A3])과 그림을 포함시키고 변수처럼 액세스 할 수 있습니다.
  • 구문 분석을 행복하게하기 위해 괄호와 기타 불필요한 코드를 생략하십시오.
  • Google과 유사한 엔진으로 코드 검색 (특히 35ms 이내에 검색 결과 얻기)
  • 복잡한 if조건을 표와 같은 방식으로 표시 (여전히 링크 검색)
  • 유사한 코드를 찾고 차이점을 추출하여 최대 값으로 줄일 수있는 리팩토링 도구
  • 언어 규칙을 준수하면서 코드 생성 지원 (생각 : 같은 이름의 메소드가 이미 존재하거나 어노테이션에 의존하지 않는 한 Java 클래스에 대한 모든 getter 및 setter 작성)

"같은 이름의 메소드가 이미 존재하지 않는 한 Java 클래스에 대한 모든 getter 및 setter를 작성하십시오."이클립스가 그렇게 생각합니다 ...
Hila

"사용하는 방식으로 코드를 표시하십시오"및 "중괄호 생략 허용"이 호환 가능한 목표입니까?
TRiG

@Hila : 예. 그러나 코드는 보입니다 . 내가 원하는 것은 컴파일러가 Java 소스를 컴파일 할 때이를 생성한다는 것입니다. 나는 그들이 소스를 어수선하게 만들고 싶지 않습니다.
Aaron Digulla

@TRiG : IMHO, 둘 사이에 큰 중복이 있습니다. 모든 코드를 들여 씁니다. 버팀대는 완전히 쓸모가 없습니다.
Aaron Digulla

아마도 IDE가 중괄호를 저장하지만 표시하지 않으면 작동 할 수 있습니다.
TRiG

2

동적 언어 유형 확인

코드가 너무 '메타'가 아닌 한 Ruby 또는 Python 용 IDE는 백그라운드 작업을 실행할 수 있어야합니다.

  • 주어진 함수에 대해 인수로 전달 될 가능한 모든 클래스를 결정합니다.
  • 해당 클래스의 경우 해당 함수가 호출 한 모든 메소드에 응답합니다.
  • 구현 해야하는 누락 된 메소드가있는 호환되지 않는 클래스 목록을 제공합니다.

아직이 작업을 수행하는 IDE를 보지 못했습니다.


이 IDE 또는 일반적으로 IDE를 수행하는 R / P IDE를 보지 못했습니까?
Mark C

나는 이것을 어디에도 보지 못했지만, 실제로 열심히 보지는 않았습니다.
AShelly

Roel Wuyts의 RoelTyper와 Lex Spoon의 Chuck은 Squeak에 대해 이런 종류의 분석을 수행했습니다.
Frank Shearar

이것은 아마도 유형 유추를 위해 고안되지 않은 언어의 일종의 유형 유추 시스템을 기반으로해야 할 것입니다.
Lie Ryan


2

이클립스의 자동 빌드는 7 년 전 제가 가장 존경하는 기능입니다. 이제는 당연한 것으로 생각합니다.


intellij는 v12에서만 제공됩니다. 일식이 더
잘하는

2

Xcode 4는 세미콜론과 오타를 수정하고 화살표를 사용하여 오류 발생 방법을 보여줍니다.

예 :

NSString *a = [[NSString alloc] init];
[a release];
int l = [a length];

화살표가에서 그려집니다 [a release][a length]사용할 수없는 이유를 보여 [a length].


이 동작은 clang 정적 분석기에 달려 있습니다. 별도의 명령으로 실행하고 브라우저에서 출력을 볼 수 있습니다. 멋진 화살표는 없습니다.
Will

1

DevExpress 'CodeRush와 같은 코드 템플릿 및 확장 C #에서 a DependencyProperty는 작성하는 데 큰 어려움이 있습니다. 구문은 자세하게 표현할 수 있지만 단순히 "dp"를 입력하면 유형, 이름 및 기본값을 입력하는 스 니펫과 비슷한 것을 가져옵니다. 필요한 "사용"문을 추가하고 메모리가 제공되는 경우 프로젝트 참조가 가능합니다.

이점은 간단한 INotifyPropertyChanged속성 구현과 같이 자주 재사용하거나 다시 작성하는 코드에 대해 템플릿을 작성하는 것입니다 . 여기서는 템플릿 에 속성의 이름과 유형 (다른 확장기가 처리하지 않은 경우)을 지정하면됩니다. 백킹 변수 작성을 포함하여 나머지를 처리합니다.


1

Pex 는 매우 멋진 자동 단위 테스트 생성을 수행합니다. 코드를 추적하고 분기점을 결정하며 조건부 솔버를 사용하여 가능한 모든 분기에 맞는 입력을 생성 한 다음 결과를 반복 가능한 단위 테스트로 내보낼 수 있습니다. 복잡한 문자열 처리 코드를 모욕 할 수 있습니다.


좋은! 그러나 전체 테스트 케이스가 아닌 테스트 데이터 생성에 더 많이 사용되기를 바랍니다 . [테스트 데이터 + 예상 출력 = 테스트 사례] 즉, 예상 출력을 자동으로 생성한다는 것은 실제로 자신이 생각하는 것을 테스트하지 않음을 의미합니다. 사양을 알고있는 사람이 확인해야합니다.
Macneil

1

Eclipse에서 SEtter 및 Getter 자동 생성과 마찬가지로 인터페이스에서 클래스를 구현하는 메소드를 작성하십시오.


1

IntelliJ Idea의 JPA 지원

DatabaseEntity가 있다고 언급하십시오.

@Entity
public class Customer{
[...]
String lasName;
[...]

이제 JPA 쿼리가 있습니다.

Query q = "selecct s from Customer c where c.lasName=:lastName"

일정 시간이 지나면 엔티티 내에서 오타가 발생하고 lasnamelastName 으로 리팩토링하기로 결정합니다 .

이 IDE는 JPA 쿼리도 리팩토링합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.