יום חמישי, 25 באוגוסט 2011

5. אותיות.

אז למדנו מספרים אבל מה עם אותיות? מילים? טקסט?

בתוכנית אנו מתייחסים לקבוצות של מילים כמחרוזות. הנה דוגמה למחרוזות, צבעתי אותם באדום כדי שיהיה קל לזהות:

'Hello.'

'Ruby rocks.'

'5 is my favorite number... what is yours?'

'Snoopy says #%^&*@! when he stubs his toe.'

'           '

' '

כמו שאתם רואים, למחרוזות יש פיסוק, ספרות, סימנים, ורווחים.... לא רק אותיות. במחרוזת האחרונה אין כלום, למחרוזת כזו נקרה מחרוזת ריקה.

עד כה השתמשנו בפקודה puts עם מספרים, בואו ננסה אותה עם כמה מחרוזות:

puts 'Hello, world!'

puts ''

puts 'Good-bye.'

hello, world!

 

Good-bye.

זה עובד מצויין. עכשיו נסו כמה מחרוזות משלכם.

חשבון במחרוזות

בדיוק כפי שניתן לעשות חשבון עם מספרים כך ניתן לעשות חשבון עם מחרוזות! טוב נו, בערך... בכל אופן, ניתן לחבר בין 2 מחרוזות. בואו ננסה לבצע חיבור בין 2 מחרוזות ונראה מה puts עושה עם זה.

puts 'I like' + 'apple pie.'

I likeapple pie.

אופס! שכחתי לשים רווח בין 'I like' ל 'apple pie' . בדרך כלל אין משמעות לרווחים, אבל במחרוזות כן יש להם משמעות. (זה נכון מה שאומרים: מחשבים לא עושים מה שאתם רוצים שהם יעשו, אלה רק מה שאתם אומרים להם לעשות.) בואו ננסה שוב:

puts 'I like ' + 'apple pie.'

puts 'I like' + ' apple pie.'

I like apple pie.

p dir="ltr">I like apple pie.

(כמו שאתם רואים זה לא משנה באיזו מחרוזת הוספתי את הרווח.)

אז ראינו שניתן לחבר מחרוזות, אבל אפשר גם להכפיל מחרוזות! (בכל אופן במספר) שימו לב:

puts 'blink ' * 4

batting her eyes

סתם, אני צוחק, זה בעצם עושה את זה:

blink blink blink blink

כשחושבים על זה זה הגיוני לגמרי, אחרי הכל:

7*3 = 7+7+7

אז:

'moo' *3 = 'moo' + 'moo' + 'moo'

 

12 לעומת '12'

לפני שנמשיך הלאה, עלינו לוודא שאנו מבינים את ההבדל בין מספרים וספרות, 12 הוא מספר, אבל '12' הוא מחרוזת עם שני ספרות.

בואו נשחק עם זה קצת:

puts 12 + 12

puts '12' + '12'

puts '12 + 12'

24

1212

12 + 12

ומה דעתכם על זה:

puts 2 * 5

puts '2' * 5

puts '2 * 5'

10

22222

2 * 5

אלו דוגמאות פשוטות. אך אם לא תהיו זהירים אם איך שאתם מערבבים מחרוזות ומספרים אתם עלולים להיתקל ב...

בעיות

יתכן וכבר ניסיתם כמה דברים שלא עבדו. אם לא בואו ננסה כמה:

puts '12' + 12

puts '2' * '5'

#<TypeError: can't convert Fixnum into String>

אמממ... הודעת שגיאה. הבעיה היא שלא ניתן לבצעה חיבור בין מספר למחרוזת, או להכפיל מחרוזת במחרוזת, אין בזה הגיון לפחות כמו בדוגמא הבאה:

puts 'Betty' + 12

puts 'Fred' * 'John'

משהו נוסף שכדאי לשים לב אליו: ניתן לכתוב בתוכנית

'pig' *5

כיוון שזה אומר 5 סטים של המחרוזת 'pig' מחוברים ביחד. אל לא ניתן לכתוב:

5* 'pig'

כיוון שזה אומר 'pig' סטים של הספרה 5, שזה טיפשי.

לבסוף מה אם נרצה שהתוכנית תדפיס:

You're swell!

בואו ננסה את זה:

puts 'You're swell!'

ובכן, זה לא יעבוד, לא היתי מנסה להריץ את זה אפילו. המחשב יחשוב שסיימנו עם המחרוזת. (זה למה כדאי להשתמש בעורך טקסט שמבצע צביעת תחביר עבורכם.) אז כיצד נגרום למחשב לדעת שאנו רוצים להשאר במחרוזת? אנו חייבים לבצעה עקיפה כך:

puts 'You\'re swell!'

You're swell!

בקסלש לפני הגרש, במילים אחרות אם יש לכם בקסלש לפני תו, לפעמים המחשב יתרגם זאת כתו אחר, הדברים היחידים שבקסלש עוקף הם גרש והבקסלש עצמו. (אם חושבים על זה אז תוים שמבצעים עקיפה חייבים לעקוף גם את עצמם.) אני חושב שכדאי לראות כמה דוגמאות:

puts 'You\'re swell!'

puts 'backslash at the end of a string:   \\'

puts 'up\\down'

puts 'up\down'

You're swell!

backslash at the end of a string:   \

up\down

up\down

שתי התוצאות האחרונות זהות, מאחר והבקסלש לא עוקף את האות 'd' אך כן עוקף את עצמו. הן לא נראות אותו הדבר בקוד אך מבחינת המחשב הן אותו הדבר.

אם יש לכם עוד שאלות פשוט המשיכו לקרוא מכיוון שאחרי הכל, לא יכולתי לענות על כל השאלות בעמוד זה.

אין תגובות:

הוסף רשומת תגובה