Ruby์˜ ๐Ÿ›ธ์šฐ์ฃผ ์—ฐ์‚ฐ์ž๋ž€?

Jinsu Kimยท2021๋…„ 2์›” 26์ผ
0

Ruby

๋ชฉ๋ก ๋ณด๊ธฐ
1/2

๋ชฐ๋ž๋˜ ๊ฒƒ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š” ๊ธ€

Ruby์˜ ๏ผœ๏ผ๏ผž์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ณ  ๋ฒˆ์—ญํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.
(์ง€๊ธˆ๊นŒ์ง€ ๋ณธ์ ์ด ์—†์—ˆ๋Š”๋ฐ ์ฝ”๋“œ๋ฅผ ์ฝ์–ด๋ณด๋‹ˆ ๊ฐ€๋” ๋‚˜์™€์„œ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค)

๐Ÿ›ธ ์šฐ์ฃผ์—ฐ์‚ฐ์ž <=> ์—ฐ์‚ฐ์ž

๐Ÿ›ธ ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ์ด๋Ÿฐ ์šฐ์ฃผ์„ ๊ณผ ๋‹ฎ์•„(?) ์ด๋ฆ„์ด ๋ถ™์—ฌ์ง„ <=>๋ฅผ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.
(์˜์–ด : Three-way comparison, ์ผ๋ณธ์–ด : ๅฎ‡ๅฎ™่ˆนๆผ”็ฎ—ๅญ, ํ•œ๊ตญ์–ด : ์šฐ์ฃผ์„  ์—ฐ์‚ฐ์ž

์ด ์šฐ์ฃผ ์—ฐ์‚ฐ์ž๋Š” ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ๋น„๊ต์—ฐ์‚ฐ์ž์™€ ๊ฐ™์ง€๋งŒ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์ด ์กฐ๊ธˆ ๋ณต์žกํ•˜๋‹ค.
๋‹จ์ง€ ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž๋Š” true๋˜๋Š” false๋ฅผ ์š”๊ตฌํ•  ๋•Œ์— ์ด์šฉํ•˜์ง€๋งŒ ์šฐ์ฃผ์—ฐ์‚ฐ์ž์˜ ๊ด€ํ•ด์„œ๋Š” ๋น„๊ต๊ฒฐ๊ณผ๋ฅผ ์ˆ˜์น˜๐Ÿ”ข๋กœ ํ‘œ์‹œํ•œ๋‹ค.

์˜ˆ์‹œ

100 <=> 200   ... -1
200 <=> 100   ... 1
200 <=> 200   ... 0
100 <=> '100'  ... nil

โฌ†๏ธ ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ
์ขŒ์ธก์ด ์˜ค๋ฅธ์ชฝ๋ณด๋‹ค ์ž‘์œผ๋ฉด ์Œ์ˆ˜(-1)
์ขŒ์ธก์ด ์˜ค๋ฅธ์ชฝ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์ •์ˆ˜( 1)
์ขŒ์ธก๊ณผ ์˜ค๋ฅธ์ชฝ์ด ๊ฐ™๋‹ค๋ฉด ์ œ๋กœ( 0)
๋กœํ‘œ์‹œํ•œ๋‹ค
๋น„๊ต๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋„ค๋Š” nil์ด ๋œ๋‹ค.

๐Ÿ›ธ ๋ฐฐ์—ด์—์„œ์˜ <=>

์ž์‹ ๊ณผ ๋‹ค๋ฅธ๊ฒƒ(other)์˜ ๊ฐ ์š”์†Œ๋ฅผ ์„œ๋กœ <=>๋กœ ๋น„๊ตํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด ๊ทธ ๊ฐ’์„ ๋Œ๋ ค์ค€๋‹ค.

  • ๊ฐ์š”์†Œ๊ฐ€ ๊ฐ™๊ณ , ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ฐ™์€๊ฒฝ์šฐ์—๋Š” 0์„ ๋Œ๋ ค์ค€๋‹ค.
  • ๊ฐ ์š”์†Œ๊ฐ€ ํ‰๋“ฑํ•œ ๊ฒƒ๋งŒ ๋ฐฐ์—ด ๋์—๋งŒ ๋‹ค๋ฅผ ๊ฒฝ์šฐ ์ž์‹  ์ชฝ์ด ์งง์œผ๋ฉด -1์„ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 1์„ ๋Œ๋ ค์ค€๋‹ค.
  • other์— ๋ฐฐ์—ด์ด์™ธ์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” nil์„ ๋Œ๋ ค์ค€๋‹ค

์•„๋ž˜์˜ ์˜ˆ์‹œ๋ฅผ ํ™•์ธํ•˜์—ฌ ๋ณด์ž

[ 1, 2, 3 ] <=> [ 1, 3, 2 ]       #=> -1
[ 1, 2, 3 ] <=> [ 1, 2, 3 ]       #=> 0
[ 1, 2, 3 ] <=> [ 1, 2 ]          #=> 1

์ •๋ ฌ์„ ํ•  ๋•Œ ๋งŽ์ด ์“ฐ์ด๋Š” ๊ฒƒ ๊ฐ™๋‹ค

users.sort{ |a, b| a.age <=> b.age }

์•„์ง ๋งŽ์€ ๊ธ€์„ ์“ฐ์ง€์•Š๊ณ  ์ผ๋ณธ์–ด๋„ ์„œํˆด๋Ÿฌ ๊ธ€์ด ์—‰๋ง์ง„์ฐฝ์ธ๊ฒƒ ๊ฐ™๋‹ค. ์กฐ๊ธˆ์”ฉ ๊ธ€์„ ์จ๋‚˜๊ฐ€๋ฉด์„œ ๊ฐœ์„ ํ•ด๋‚˜๊ฐ€๊ณ ์ž ํ•œ๋‹ค.
์•ž์œผ๋กœ๋„ ruby๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด ๋˜๊ณ ์ž ์ด๋ ‡๊ฒŒ ๊ธ€์„ ์กฐ๊ธˆ์”ฉ ์จ๋‚ด๋ ค๋‚˜๊ฐ€๊ณ ์ž ํ•œ๋‹ค!

[์ฐธ๊ณ  ์‚ฌ์ดํŠธ (์ผ๋ณธ)]
https://docs.ruby-lang.org/ja/latest/method/Array/i/=3c=3d=3e.html
https://blog.codecamp.jp/posts-34186

profile
Ruby์™€ js๋กœ ์ฒซ ์ปค๋ฆฌ์–ด๋ฅผ ์‹œ์ž‘ํ•˜์˜€๊ณ  3๋…„์ฐจ ์—”์ง„๋‹ˆ์–ด์ž…๋‹ˆ๋‹ค! vim์— ๊ด€์‹ฌ์ด ๋งŽ์Šต๋‹ˆ๋‹ค!

0๊ฐœ์˜ ๋Œ“๊ธ€