BanditBool2 / ReadingRecord

2 stars 0 forks source link

[CH3] 3.1 람다 문법 규칙에 맞지 않는 표현식 찾기 #9

Closed hanbonghun closed 1 year ago

hanbonghun commented 1 year ago

퀴즈 4번에서

(Integer i) -> return "Alan"+i;  

는 중괄호로 감싸지 않아서 틀렸다는데 중괄호가 있고 없고가 어떤 차이가 있으며 어느 경우에 중괄호를 써야 하나요??

퀴즈 5번에서

(String s) -> {"Iron Man";} 

이 유효하지 않은 람다 표현인 이유가 구문이 아니라 표현식이기 때문이라고 하는데, 구문과 표현식 각각의 뜻이 무엇이고 어떤 차이가 있나요

chaewon-io commented 1 year ago

람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있습니다.

람다의 구조

그림1

그림1

따라서, 퀴즈 4의 경우 (Integer i) → { return "Alan" + i; }처럼 되어야 올바른 람다 표현식이라고 할 수 있습니다.

| 참고 : https://dev-kani.tistory.com/38

chaewon-io commented 1 year ago

표현식이란?

값, 변수, 연산자의 조합입니다. 값은 자체로 표현식이고, 변수도 동일합니다.

구문이란?

파이썬 인터프리터가 실행하는 코드 단위입니다.

구문과 표현식의 차이

구문과 표현식을 모두 프로그램에서 작성하는 명령어들입니다.

간단하게 말해 값의 유무라고 할 수 있습니다.

구문은 액션을 수행하지만 아무것도 리턴하지 않고, 표현식은 액션을 수행하고 결과를 리턴합니다. 보통 리턴값이 필요없는 명령어를 코딩하는 명령형 언어에서 주로 나타나는 구문보다는 람다 표현식을 사용하여 프로그래밍할 때는 표현식을 사용하는 것이 낫습니다.

즉, 함수에게 arguments로 넘겨줄 수 있는 것이라면 표현식이고, 그럴 수 없다면 구문이라고 할 수 있습니다. 그렇지만 구문도 표현식처럼 값을 줄 수 있는데 그게 바로 return문을 이용할 때 입니다.

따라서, 퀴즈 5의 경우, (String s) → "Iron Man" 또는 (String s) → { return "Iron Man"; }처럼 되어야 올바른 람다 표현식이라고 할 수 있습니다.

| 참고 : https://ezsnote.tistory.com/entry/statements-vs-expressions-%EA%B5%AC%EB%AC%B8-vs-%ED%91%9C%ED%98%84%EC%8B%9D-in-lambda

kkambbak commented 1 year ago

구문(statement)과 표현식(expression)의 차이

Expression 표현식

변수, 연산자, 메서드 호출을 문법에 맞게 만들어 구성하는 것

int cadence = 0; anArray[0] = 100; System.out.println("Element 1 at index 0: " + anArray[0]);

굵게 표현된 부분이 Expression이다.

식으로 반환되는 값의 데이터 유형은 식에서 사용된 요소에 따라 결정된다. "cadence = 0" 표현식은 할당 연산자가 왼쪽 피연산자와 동일한 데이터 유형의 값을 반환하기 때문에 int를 반환합니다.

123 이나 (50*100)/2 와 같은 복합 표현식도 있다.

표현식은 대개 다른 표현식 내에서 사용되며, 그 결과는 변수에 할당되거나 함수의 매개변수로 전달됩니다.

Statement 구문,문장

자바 프로그램 실행의 단위이며 하나의 문장은 하나의 실행 명령어를 나타내고, 세미콜론( ; ) 으로 끝이 난다.

// declaration statement 선언 구문 double aValue = 8933.234;

Block 블록

중괄호로 묶인 코드 블록. 블록 내에는 다수의 문장과 표현식이 포함될 수 있으며, 블록 내의 코드는 함께 실행됨 주로 for,while문 등 제어구조에서 활용되며, 블록 내에서 변수를 선언할 수 있음


Statements는 실행의 단위인게 가장 큰 차이가 아닌가 싶네요

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html