방법 내에 순환할 때의 되돌아오는 값이 있습니다. (되돌아오는 값)

7374 단어 RubyRails
안녕하세요!나는 프로그래머를 목표로 공부한 구보웅귀다.
이번에는'방법 안에 순환하는 상황에서 되돌아오는 값(되돌아오는 값)'에 대해 자신의 의문, 사고, 아는 것을 적는다.
한 번은 루비의 학습 중에 오류가 발생했다.방법을 사용하여 값을 되돌려 연산할 때.
undefined method'+ 'for nil: nilclass' 로 표시됩니다.
빈 객체는 추가할 수 없습니다.그러니까
머릿속에'?'되돌아오는 값에 관한 문제가 많이 생겨서 나는 내가 잘 이해하지 못한다는 것을 알게 되었다.
그래서 나는 많은 생각을 하고 실험을 하며 조사를 했다.
여러분을 도울 수 있는 내용이라면 기쁘겠습니다.
또 잘못된 점이나 "이렇게 쓰는 게 좋을 것 같다"는 조언이 있다면 댓글로 남겨주세요.
그럼 시작합시다!

1. 반환값은


반환 값은 대상이나 방법이 처리된 최종 값을 가리킨다.값을 깎아달라고도 한다.
Ruby 객체 자체나 사용 방법의 방정식에는 반환 값이 있습니다.
Rubby의 식은 문자열과 숫자 외에 변수, 방법 호출, 연산자 등도 포함한다.
'아이 상 ', 5296, (4+24) 등이 그렇다는 뜻이다.
그리고 이 모든 것들은 되돌아오는 값이 있다.(위의 예에 따르면'너를 사랑해', 5296,28)

2. 방법의 반환값은 어떻습니까?


그렇다면 방법의 반환치는 어떤 것일까.
Ruby Reference로 조사를 시도했어요.
http://ruby-for-beginners.rubymonstas.org/writing_methods/return_values.html
아래와 같다.
In Ruby, a method always return exactly one single thing (an object).
Also note that in Ruby we do not have to use the statement return, as in other languages. In fact, most Ruby code does not use the keyword return at all.
This is extremely convenient, but it is also something we need to learn:
If we don’t do anything else, then a method will return the value that was returned from the last evaluated statement. Most often, this is the last line in the method body.
요컨대
"방법은 다른 언어와 달리 값을 되돌려줍니다.return을 기술할 필요가 없습니다.
설명이 없으면 마지막 공식의 값을 되돌려줍니다.
이런 느낌인가?
예컨대
def test(number)
  number + 1      ←メソッドの中の最後の式
end

puts test(5)
이것을 실행하면 6으로 표시됩니다.
"number+1"의 대답 "6"은test 방법의 반환값입니다.

3. 실험: 방법 반환값의 판정


처음에 쓴 방법의 반환값을 사용하여 연산할 때, "반환값은 'nil' 입니다."오류가 발생했습니다.사실 그때 방법에는while문(순환)이 있었다.
조건이 충족되기 전에 명령을 실행하고 조건이 충족되면 순환에서 물러나 방법 호출원으로 돌아갑니다.
반환값으로 계산하는 중 오류가 발생했습니다.
그래서 나는 방법의 반환값이'nil'인지 아닌지를 생각했다.
판단 방법의 반환값이'nil'인지'nil'인지 코드를 고려했기 때문에 한번 보고 싶습니다.
우선while 문장이 없는 패턴입니다.
def test(count)
    puts "0より大きい数字を入力してください。"
    count = gets.to_i
end

count = test(count)

if count.nil?
  puts "test(count)の戻り値はnilです。"
else
  puts "test(count)の戻り値は#{count}です。"
end

「.nil?」count (수신기) 의 내용이 'nil' 일 때 진실로 되돌아오는 것이지, 'nil' 일 때 가짜로 되돌아오는 방법이 아닙니다.
예를 들어 터미널에서 실행하면 24개의 숫자를 입력합니다

대화 상자.
위의 코드는 예상과 같이 리턴의 기술이 없어도 되돌아오는 값은'nil'이 아닙니다.
그럼 다음은 어때요?
테스트 방법에while 문장을 넣고 10보다 큰 숫자를 입력하기 전에 계속 입력하세요.
그런 다음 반환 값이 "nil"인지 여부를 판단합니다.
def test(count)
  while count <=10
    puts "10より大きい数字を入力してください。"
    count = gets.to_i
  end

end

count = 0
count = test(count)

if count.nil?
puts "test(count)の戻り値はnilです。"
else
puts "test(count)の戻り値は#{count}です。"
end
단말기에서 실행해 보세요.
이번에는'4→24'순으로 가입한다.(while문이 작용하는지 아닌지를 판단하기 위해)

이번 반환값이 뜻밖에도 "nil"이다!
다음은while문 다음에 "return count"를 넣어 보세요.
def test(count)
  while count <=10
    puts "10より大きい数字を入力してください。"
    count = gets.to_i
  end
  return count   ←追加しました
end

count = 0
count = test(count)

if count.nil?
puts "test(count)の戻り値はnilです。"
else
puts "test(count)の戻り値は#{count}です。"
end
실행해 보세요.

물론 반환값은 "24"입니다.

4. 결과


그럼 다시 한 번 총괄해 봅시다.
방법의 반환 값이 "nil"인지 판단했습니다.
순서
컨디션
결실

글이 없다
반환 값: 24
2
while문이 있고 return 방법이 없습니다
반환값:nil
3
while문도 있고 Return 방법도 있어요.
반환 값: 24

5. 고찰


그렇다면 상술한 결과가 됐다.
여기서부터 이것은 단지 내가 생각하는 내용일 뿐이다.(안정성이 낮음)
루비는 방법 내에서 종식으로 얻은'값'을 잠시 어딘가에 둔 것 아니냐는 것이다.
예를 들어 1의 실험에서
def test(count)
    puts "0より大きい数字を入力してください。"
    count = gets.to_i      ←ここで入力された値をどこかに仮置きしている。
end

count = test(count)

if count.nil?
  puts "test(count)の戻り値はnilです。"
else
  puts "test(count)の戻り値は#{count}です。"
end

1) 값이 세 번째 행에서 일시적으로 배치됩니다.
2) 메서드에 다음 방정식이 있는 경우 임시로 배치된 값을 취소하고 다음 값을 임시로 배치합니다.(이번엔 없다)
3) 메서드가 끝나면 마지막으로 임시로 배치된 값을 메서드의 반환값으로 반환합니다.
간 기분이야.
그러나 방법에 순환문이 있는 상황에서 순환에서 벗어날 때 왜 잠시 놓인 값이 폐기되었는지 모르겠다.
왜 그런지 모르겠지만...(답사는 없나요?)

6. 결론


사실 이 블로그를 쓰기 전에 저는 참고할 만한 것이 있는지 찾아보다가 답이 될 만한 것을 발견했습니다.
이것은 루비의 참고 수첩이다.
https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html
이 안에서while에 대한 설명의 맨 아래는 이렇게 쓰여 있다.

while 반환nil.
잘 쓰여있네(웃음)
왜 그렇게 됐는지 쓰진 않았지만 그래도 어쩔 수 없었어요.
이번엔 이렇게 끝내자.
그러므로
결론은 "루비의 규칙은 이렇다"는 것이다.

7. 소감


왠지 의외의 느낌이 든다.
그런데, 응, 유창하게 완성할 수 있을까?
그럼 다시 정신 차려
앞으로 공부를 추진할 때 일이 없으면 리턴 방법을 쓰고 싶어요.
사실 "return count"을 쓰지 않고 "count"를 직접 써도 같은 결과가 나온다.
근데 그러면 그 기술이 뭘 하고 있는지 모르겠어요.
순환이 있든 없든 다른 프로그래머를 위해서는 코드를 쉽게 써서 그 방법이 무엇을 하는지 쉽게 알 수 있도록 하는 것이 좋다.
어때?
이번이 두 번째 투고인데 배운 것은:
1) 스스로 가설을 세우고 실험을 하여 결과에서 자신의 답을 얻는 것이 중요하다는 의문이 있다.
2) 그 과정은 사실 즐겁다.
3) 이 과정에서 다양한 조사가 이루어지고 중간에 답을 찾게 된다.
4) 블로그 형식으로 출력하는 것이 생각보다 긴장되고 무서운 부분이 있지만 예상보다 더 공부해야 한다
네.
좋은 가치를 얻고 저축할 수 있다는 것도 격려다.
감사합니다.m(_ _)m
이번에는 이게 다야.감사합니다.


참조 안내서
또한 파라미터가 있는break를 통해while식의 반환값을 이 값으로 설정할 수 있습니다.
그래서 찾아봤는데
https://hydrocul.github.io/wiki/programming_languages_diff/control_flow/break.html#ruby
브레이크 뒤에 숫자나 변수를 쓰는 것이 좋습니다.
def test(count)
  while count <=10
    puts "10より大きい数字を入力してください。"
    count = gets.to_i
    break count    ←ここです
  end

end

count = 0
count = test(count)

if count.nil?
puts "test(count)の戻り値はnilです。"
else
puts "test(count)の戻り値は#{count}です。"
end
해봐.

'니엘'이 안 됐어요!
어쩌면 너는 이미 알아차렸을지도 몰라, 이게 문제야...

네.순환하지 않다.
순환의 의미가 없다.
이게 뭐야...
이러면 정말 끝장이야.감사합니다.

좋은 웹페이지 즐겨찾기