스위프트 플레이그라운드 코딩배우기1 의 "현상금의 땅" 코드 좀 봐주세요

func getGemSwitch() { if !isOnGem && !isOnClosedSwitch { moveForward() } else { if isOnGem { collectGem() moveForward() } else if isOnClosedSwitch { toggleSwitch() moveForward() } } if isBlocked && isBlockedLeft { turnRight() moveForward() turnRight() } if !isBlockedLeft && !isBlockedRight { if isBlocked { turnLeft() moveForward() turnLeft() } } } while !isBlocked || !isBlockedRight { getGemSwitch() }

마지막 while 에서 &&연산자가 아닌 ||연산자를 사용하면 클리어가 되는데

맨 우측 하단 모서리에서 &&연산자가 안되는 이유를 모르겠습니다.

&&연산자를 사용하면

if !isBlockedLeft && !isBlockedRight { if isBlocked { turnLeft() moveForward() turnLeft() } }

이 조건이 실행되면서 while문이 끝납니다.

if !isBlockedLeft && !isBlockedRight { if isBlocked { turnLeft() moveForward() turnLeft() moveForward() //추가 } }

이렇게 moveForward()를 추가해서 앞으로 한칸을 가도 while문이 끝납니다.

앞으로는 갈 수 있지만 오른쪽은 못가기때문에 while문이 돌아야하는데 왜 끝날까요?

마지막 스위치를 작동시키고 마지막에 만나는 벽앞에서 while문이 끝나야 하는거 아닌가요?

그리고 코드양을 더 줄일 수 있을까요?

아직 답변이 없어요.