을 코드를 사용하면 연필과 종이를 사용하거나 알고리즘을 미리 생각하는 언어로 설명하는 것이 좋습니다. 대부분의 외국어를 배우는 사람들은 모국어로 문장을 조합하여 외국어로 번역함으로써 시작합니다 , 그 다음 외국을 말하기. 소수의 외국어 학습자가 본 언어로 생각할 수있는 언어는 거의 없습니다.
코딩 방식은 다르지 않습니다. 평생 동안 영어로 말하고 생각 해왔다. 이제 사고, 구문, 핵심 단어의 다른 패턴을 배우려고합니다. 이 작업은 훨씬 쉽게 갈 것입니다 경우 당신 : 당신은 조리법
쓰기를 수행 할 작업을 높은 수준의 자연 언어로
- 워크 아웃 t는 한 번에 너무 많은 일을하려고
나는 이런 식으로 뭔가 찾고있는 프로그램을 표시 교사, ID했다 :
//method to count the number of list entries ending with a particular character
public int countFirstNamesEndingWith(char lookFor) {
//declare a variable to hold the count
int cnt = 0;
//iterate the list
for (Name n : list) {
//get the first name
String fn = n.getFirstName();
//get the last char of it
char lc = fn.charAt(fn.length() - 1);
//compare
if (lc == lookFor) {
cnt++;
}
}
return cnt;
}
글 머리 기호를 번갈아 가며 :
이 주석은 무엇을해야하는지에 대한 수준 높은 설명을 제공합니다. 한 줄의 코드를 작성하기 전에 먼저 코드를 작성합니다. 내 코스는 주석 처리되지 않은 코드에 벌점을 주었고, 먼저 작성하는 것은 요구 사항을 방해하는 편리한 방법이었습니다 (그들은 항상 자질구레 한 행동 이었지만, 항상 그렇지는 않지만 ..). 또한 논리 알고리즘을 작성하는 것은 정말 쉽습니다. 고급 단계의 언어로 작성한 다음 단계를 언어 학습으로 번역하십시오. 당신이 작성한 코드가 이전에 설명한 알고리즘을 구현하지 않았다는 것이 확실하기 때문에이 접근법을 취한다면 분명히 생각한 것 같습니다.
Don ' 한 줄로 너무 많이하려고하지 마십시오. 예, 많은 코더들이 시원하게 보이거나 속임수로 생각하거나, 인상적인 코딩 기법을 사용하여 좋은 10 행 알고리즘을 모호한 언어 기능을 사용하는 한 줄의 코드로 패키징해야한다고 생각합니다. 그러나 언젠가는 매우 높습니다. 다른 사람이 코드를 유지 보수하거나 변경하는 부분을 변경해야 할 가능성이 있습니다. 더 이상 차갑지 않으며 그다지 똑똑하지는 않습니다.
Aominee,
return (int)list.stream().filter(e -> e.charAt.length()-1)==c).count();
그것은 당신의 문제에 대한 해결책의 한 줄 구현의 : 자신의 의견에, 실제로 우리에게이의 예처럼 뭔가를 제공합니다. 응?글쎄, 그것은 버그가있다. (시작을 위해) 그러나 그것은 나의 논쟁의 주요 추진력이 아니다. 좀 더 기본적인 수준에서 : 당신은 그것이 무엇을하고 있는지 알 수 있습니까? 당신은 그것을보고 2 초 만에 어떻게 작동하는지 말해 줄 수 있습니까?
상당히 고급 언어 기능입니다. 이해하기 어렵고 결과로 유지하기가 어려우며 조금만 보면서 많은 일을하기 때문에 매우 힘든 해결책 일 수 있습니다. 언어에 정통한 사람이라면 의미가 있습니다. 이 한 줄은 목록에있는 모든 항목에 대해 호출되는 작은 하위 메서드를 효과적으로 갖고 목록에있는 루프를 반복하는 기능을 번들로 제공하며 이름이 찾은 숯으로 끝나는 지 여부를 계산하는 작업입니다
그것은 훌륭한 기능이고, 귀여운 예이고, 확실하게 프로덕션 자바에서 그 자리를 차지하고 있습니다. 그러나 여기는 당신의 학습 연습에서 여기에 없을 것입니다.
마찬가지로, 저는 여러분의이 행이 :
if (n.getFirstName().length() - 1 == c) {
"너무 많이하고 있습니다."- 논리가 깨지기 때문에 나는 이것을 말하고 있습니다. 당신은 알고리즘을 효과적으로 구현하기위한 충분한 코드를 작성하지 않았습니다. 이 방법을 구현하기 위해 실제로 더 많은 코드를 작성해야합니다.
if (n.getFirstName().charAt(n.getFirstName().length() - 1) == c) {
이것은 두뇌에로드하고 이해하는 데 알맞습니다. 수락 된 대답은 먼저 이름을 임시 변수로 가져 와서 조금 뒤집습니다. 그것은 합리적인 최적화입니다. 마지막 문자를 임시 변수로 가져 와서 다른 단계를.습니다. 프로덕션 시스템에서는 아마도 그렇게까지 나아 가지 않을 것입니다. 그러나 이것은 학습 단계입니다. 각 회선의 작업 횟수를 최소화하십시오. 자신의 코드에 대한 이해를 돕는 것
가능한 한 많은 코드를 적은 문자로 쓰는 경향이 있다면 스택 교환 네트워크에서 일부 코드 골프 게임을 살펴보십시오. 게임은 가능한 한 많은 언어 기능을 악용하여 매우 짧고 속임수가되는 코드를 만듭니다. 거의 모든 승자는 응축에 대한 증거로 서 있습니다. 정상적인 코더가 유지 관리하는 생산 시스템에 결코 넣어서는 안됩니다.
* 버그가 Name 객체의 첫 번째 이름을 가져 오지 않는다.
코드에 코드가 올 것으로 예상되는 알고리즘을 작성한 다음 코드가 실제로 알고리즘을 구현하는지 확인하십시오. –
첫 번째 이름의 길이를'c'와 비교합니다. 'c'는'char'이지만 암시 적으로'int'로 변환 될 수 있습니다. 그래서 기본적으로 당신의 논리는 엉망입니다. – Turing85
@ Turing85 오, 고마워! 나는 그것을 고쳐 줄 것이다 : – ImperfectLion