puts("아이디를 입력해주세요")
input_id = gets.chomp()
def login(_id)
members = ['egoing', 'k8805', 'leezche']
for member in members do
if member == _id
return true
end
end
return false
end
if login(input_id)
puts('Hello, '+input_id)
else
puts('Who are you?')
end
input_id = input("아이디를 입력해주세요.\n")
def login(_id):
members = ['egoing', 'k8805', 'leezche']
for member in members:
if member == _id:
return True
return False
if login(input_id):
print('Hello, '+input_id)
else:
print('Who are you?')
함수정의{def login(id)}가 되면 그부분을 메모리에 저장해뒀다가
함수호출{login(input_id)}이 될때, 참조한다고 알고있어요.
예를들어 영어사전을 읽고 영어공부를 한다고 치면,
사전을 읽고 영어공부를 하는 상황에서 단어의 뜻을 찾고 싶을 때 다시 사전을 찾는게 아니라
(언급하신 처음->끝->중간->끝)
사전을 읽고 영어공부를 하는 상황에서 단어의 뜻을 찾고 싶을 때 자기 뇌(메모리)속에서 찾는거죠
(처음->끝->메모리(중간아님)->끝)
함수를 정의할 때는 변수를 id로 잡고, 즉 login(id)
마지막에 결과값을 받는 함수는 변수를 input_id 즉, login(input_id)로 잡으면
컴퓨터 입장에서는 입력된 값은 input_id로 처리되니, 이 login(input_id)에 어떤 값을 주기 위해서
그 위에 정의된 함수 login(id)로 되돌아 갔다가 값을 가지고 내려오는 건가요?
컴퓨터 입장에서 생각하려다보니... 처음->끝(끝에 왔다가 함수가 정의안된걸 알게됨)->중간(이곳에서 함수의 정의에 따라 값을 내놓음)->끝 이런 식으로 되는건가 싶어서요. ㅎㅎㅎ
저도 배우는 입장이라 잘은 모르지만...return 가르쳐주실 때, return값이 나오고 나면 함수가 종료(?)된다고 하셨는데 그래서 exit을 안 붙여도 괜찮은 것 같습니다. 그리고 true가 리턴값으로 나오고 나면 함수는 종료되니까 false는 적용되지 않는 것이구요.
궁금한게 이 코드에서는 왜 return true 다음에 exit 을 쓰지 않나요? 이전 강의에서는 exit을 사용해서 그 다음에 오는 코드가 적용되지 않고 종료되도록 했는데 왜 여기에서는 안 하는지 답이 나오지 않네요ㅠㅠ 이렇게 코드를 쓴다면 return false도 같이 적용될 것 같아 혼선이 생길 것 같은데 강의 상에서는 문제 없이 작동하는 것이 신기합니다
음 저는 원래 다른언어를 사용하는 사람이고,
루비를 공부하려고 듣고 있는사람이라, 루비에서의 규칙은 아직 잘 모르겠지만요..
함수(메소드)의 경우,
입력 값은 어떤 형태로 받고, 리턴 값으로 어떤 형태를 드릴께요 하고 약속을 해요.
약속은 일관성이 있어야 하구요
(누가 어떤식으로 사용할 지 모르니까, 리턴값은 배열로 드릴께요, 아님, 문자열로 드릴께요,
boolean형태(true/false)로 드릴께요 란 식으로, 물론, 복합 형태도 있어요!)
어떤 경우는 리턴값을 주고, 어떤 경우는 안주고 하면,
함수를 사용하는 쪽에선 무슨 값이 돌아올지 몰라서 당황하게 되잖아요~
단순 return만 적은경우는, null값을 준건지, false값을 준건지 알 수 없구요
(이건, 앞으로 프로그램 하다보면 무슨 말인지 알 수 있으실 거에요)
이번의 경우는 아이디가 있으면 안녕, 없으면, 누구세요 하고 물어보는 처리이지만,
만약, 아이디가 없는경우, 아이디를 입력해주세요 하는 처리를 할 경우는,
if !login(input_id)
puts('아이디를 입력해주세요')
end
이런식으로 false인가 아닌가만 알고싶은 경우도 있을수도 있구요
함수를 작성할 때에는 지금 당장만 사용하는게 아니라 범용성도 생각하면서 작성해야 돼요~
한번만 쓰고 말 처리라면, 굳이 함수를 만들 필요가 없으니까요