ÖNYÜKLEME 1 -Ünite Listesi

Ünite 2 Sözleşmeler, Metinler ve Görüntüler

Öğrencilere fonksiyonların bir setten diğerine bir eşleştirme olduğunu, fonksiyonun girdi setindeki nesnelerin çıktı setindeki karşılıklarını verdiği anlatılır. Değerlendirme Çemberi konusundaki bilgileri ile birleştiğinde, öğrenciler Metinler ve Görüntüler gibi diğer veri türlerini içerecek şekilde fonksiyon anlayışlarını genelleştirirler.

Değerlendirme Çemberi Tekrarı (Süre: 30 dakika)

Çalışma kitabınızda Sayfa 7'de yer alan çalışma kağıdını kullanarak Değerlendirme Çemberi alıştırması yapın.

Öğrencilerin dıştan içe (büyük bir Çember ile başlayıp içini doldurarak) ve içten dışa (en içteki ifadeden başlayıp oluşturarak) Çember çizme alıştırması yaptığından emin olun.

Metinler ve Görüntüler (Süre: 20 dakika)

Değerlendirme Çemberleri güçlü birer araçtır ve sayılardan çok daha fazlası için kullanılabilirler. Burada gösterilen Değerlendirme Çemberi'ni ele alalım.

star50"solid""red"

Bir Değerlendirme Çemberi'ni koda dönüştürmek için kullandığınız kurallar hâlâ geçerli. Bu Çember'in kodu şu şekilde:

(star 50 "solid" "red")

Öğrencilerden buradaki bütün yanıtları bilmeleri beklenmez; onlar için amaç, Çemberler için bildiklerini yeni bir ifadeye uygulamak ve kendilerine ne anlam ifade edebileceğini tartışmaktır. Onlardan yanıtlarını gerekçelendirmelerini ve neden doğru olduğunu düşündüklerini açıklamalarını isteyin. Daha önceki Değerlendirme Çemberi örnekleriyle bağlantı kurmak yararlı olabilir.

Bu kodu Etkileşim Penceresi'ne yazın ve "Enter"e basın. Ne gördünüz?

Denemek için burayı tıklayın!

Bu aktivite, öğrencilerin yeni terimler ve kavramlarla oynaması için tasarlandı, böylece olup bitene göre kendi modellerini geliştiriyorlar. Bu noktada, öğrencilerin kodun her bir parçasını anlamaları gerekli DEĞİL. Eğer birçok kod parçası vermek zorunda kaldıysanız, sorun yok, sadece oynamalarını sağlayın!

Bu ifadelerde kullanılan tamamıyla yeni bir değer türü var: "solid" ve "red", Metin denilen tamamıyla yeni bir veri türünün örnekleri.

Metin, tırnak işaretleri arasındaki her şeydir.

Değerleri ilk öğrendiğinizde, bir programın yalnızca bir değer olabileceğini görmüştünüz, örneğin bir sayı. Etkileşim Penceresi'ne bir sayı yazarsanız, o sayı yine kendisini dönecektir. Bunu hatırlamak için Etkileşim Penceresi'nde 716'yı hesaplamayı deneyin. Ne elde etmeyi umdunuz? Metinler de birer değer olduğundan "red" değeri de yine eksiksiz geçerli bir programdır! Tıpkı sayı değerleri gibi metinler de kendilerini dönerler.

Etkileşim Penceresi'ne farklı metinler girmeyi deneyin. Birden çok kelimeyi tırnak işaretleri içinde yazarsanız ne olur? Veya Sayıları?

Öğrenciler, Metinleri, Sayıların bir benzeri olarak görmeliler: farklı bir değer türü; ama bu kendisini dönen ve bir fonksiyona argüman olarak girebilen basit bir program. 42 Sayısının ve "42" Metninin farklı değerler olduğunu unutmayın! 42 Sayısını bir sayıyla toplayabilirsiniz; fakat "42" Metnini başka bir sayıya ekleyemezsiniz.

Bu ifade, ayrıca, star denilen yeni bir fonksiyon içeriyor. Nasıl ki toplama fonksiyonu + iki Sayı alıyorsa, star da bir Sayı and iki Metin alıyor ve Görüntü denilen yeni bir tür veri üretiyor.

Aşağıdaki her bir değerin veri türü nedir? (Sayı, Metin veya Görüntü)

Öğrenciler şu an üç veri türü görmüş oldular: Sayı, Metin ve Görüntü. Öğrencilerin bunların her birine ait örnekleri doğru tespit ettiğinden emin olmak isteyebilirsiniz.

Değer üreten ifadeler de gördünüz, örneğin bir Sayı üreten (* 16 4). Başka ifadeler Metin veya Görüntü üretebilirler.

Aşağıdaki ifadeler hesaplandığında her biri hangi veri türünü dönecek?

For added practice, have students identify the type of each argument in each of those expressions. Going Further - If time allows, you can go further into Manipulating Images or Making Flags.

Sözleşmeler (Süre: 35 dakika)

Daha önce, iki Sayı alan birçok fonksiyon gördünüz, örneğin + ve -. Bu arada, star, bir sayı ve iki Metin alıyor. Farklı fonksiyonlar farklı girdiler alır ve her bir fonksiyonun gereksinimlerini takip etmek için bir yol gerekir.

Bir fonksiyonun Girdisi, o fonksiyonun beklediği veridir.

Bir fonksiyonun Girdisini bilmenin nasıl bir yardımı olur?

Programcılar, bir dildeki bütün fonksiyonların ve Girdilerinin listesini tutarak her bir fonksiyonun nasıl kullanıldığını rahatlıkla görebilirler. Bununla birlikte, her bir fonksiyonun ne ürettiğini tutmak da önemlidir! Söz gelimi, bir Sayı üretilmeye çalışılıyorsa, programda star kullanılmayacaktır; çünkü star sadece Görüntü üretir.

Bir fonksiyonun Çıktısı, o fonksiyonun ürettiği veridir.

Girdiler ve Çıktılar, programcılara, saçma sapan hataların önüne geçerek ve bundan sonra ne yapacakları hakkında ipuçları vererek daha iyi kod yazmalarında yardımcı olur. star fonksiyonunu kullanmak isteyen bir programcı Girdiye bakıp ilk girdi türünün bir Sayı (mesela 100 gibi) olması gerektiğini, hatırlamasına gerek kalmadan hemen bilebilir. Programcı, oraya tekil, sade bir değer yazmak yerine, (* 25 4) şeklinde bütün bir ifadeyi de yazabilir. Buradaki * fonksiyonunun Çıktısına bakarak bu kodun uygun bir değer (Sayı) döneceğini biliyoruz; dolayısıyla, *'ın sonucu herhangi bir Sayı değeri yerine kullanılabilir.

Girdi ve Çıktı önemli kavramlardır. Basit bir ifade (örneğin (+ 1 2)) üzerinde değişiklik yapılarak ve her adımda sorular sorularak güçlendirilebilirler. Örneğin, +'nın iki Sayı aldığını biliyoruz, örnekte de işte bu yüzden 1 ve 2 kullanıldı. Ancak, o değerlerin her biri bir başka ifade ile, o ifade Sayı döndüğü sürece, yer değiştirilebilirdi. Öğrencilerin her bir değerin bir ifade ile düzenli olarak yer değiştirmelerini sağlayın ve onlardan, Girdi ve Çıktıları kullanarak her bir fonksiyondaki yer değiştirmeyi gerekçelendirmelerini isteyin.

Programcılar, her bir fonksiyonun gereklerini takip edebilmek adına Girdi ve Çıktı bilgilerini içeren sözleşmeler yazarlar.

Bir Sözleşme üç parçadan oluşur: bir fonksiyonun İsmi, Girdisi ve Çıktısı.

star'ın Sözleşmesi:

; star: Sayı Metin Metin -> Görüntü

Bu demek oluyor ki, İsmi star olan fonksiyon Girdi olarak bir Sayı ve iki Metin alıyor ve Çıktı olarak Görüntü üretiyor. Sözleşme yazarken, daha genel olmasını istediğimizden, değerler yerine türleri kullanırız: bir yıldız herhangi bir boyutta olabilir; onun için, star'ın Girdisi, ilk argümanın herhangi bir Sayı olabileceğini açıkça belirtir. Dili, bir Lego derlemi gibi düşünürsek, Sözleşmeler de, her bir parçanın anahtar-kilit ilişkisine uygun olarak nasıl birleşeceğini anlatır.

Sözleşmeler, bir yerlerde kaydını tutmamızı gerektirecek kadar önemli ve faydalıdır. Çalışma kitabınızın son sayfasında Sözleşmeler sayfası yer alıyor. Sözleşmeler tablosunun ilk satırına star için sözleşme yazın.

Öğrencilerin ilk kez sözleşme yazarken yaptıkları yaygın hatalar: tür yerine değer yazma (örneğin "Metin" yerine "red") ve argümanları unutma. Sözleşmeler, genellikle (varsa) kavram yanlışlıklarının göstergesi olduğundan öğrencilerinizin yazdıklarını dikkatlice okuyun, ki ilerleyen zamanlarda sürdürmesinler.

Yeni bir fonksiyonun sözleşmesi:

; rectangle: Sayı Sayı Metin Metin -> Görüntü

Sözleşme, bir fonksiyonun İsmini yazarak ve Girdideki her bir argümana değer vererek size fonksiyonun tam olarak nasıl kullanılacağını söyler.

İşte rectangle ifadesi için bir örnek:

(rectangle 100 50 "solid" "blue")

Sizce bu kod ne üretir?

Öğrencilerin, dikkatlerini her zaman Girdiye yönelterek, argüman değerlerini değiştirip denemeler yapmalarını sağlayın.

Fonksiyonlarımız için Sözleşmeler yazarak nasıl kullanıldıklarını kolaylıkla hatırlayabiliriz.

Aşağıda + için sözleşme bulunuyor:

; +: Sayı Sayı -> Sayı

Siz de *, -, / ve sqrt için sözleşmeler yazabilir misiniz (not: sqrt karekök anlamına gelen square root kelimesinin kısaltılmışıdır)?

Bir ifade yazmak için Sözleşmeyi nasıl kullanacağınızı artık biliyorsunuz. Görüntü üreten birkaç yeni fonksiyonun Sözleşmeleri şu şekilde:

; ellipse:  Sayı Sayı Metin Metin -> Görüntü

; triangle: Sayı Metin Metin        -> Görüntü

; circle:   Sayı Metin Metin        -> Görüntü

Başka şekiller çizmek için bu yeni fonksiyonların nasıl kullanıldığını anlayabiliyor musunuz bir deneyin! İşte sizi heveslendirebilecek bir örnek

Öğrencileri, Sayı değerleri ile bütün bir ifadeyi ((star (* 10 5) "solid" "purple") gibi) yer değiştirerek, daha karmaşık ifadeler yazmaları için zorlamaya başlamalısınız. Öğrenciler, bütün bir alt-ifadeyi, onu çevreleyen fonksiyona tekil bir argüman olarak görme konusunda rahat olmalılar.

Çok ilginç bir fonksiyon kullanan bir ifade: (bitmap/url "http://bootstrapworld.org/images/icon.gif"). Bu fonksiyon, İnternette bulabileceğiniz herhangi bir görüntünün URL (bağlantı adresi) bilgisini alır ve programınızda kullanabilmeniz için o görüntüyü üretir.

Öğrencilerin bitmap/url kullanarak alıştırma yapmalarını istiyorsanız, Google Images veya Bing Images gibi bir görüntü arama motoru kullanmanız önerilir. Öğrencilerin görüntünün kendisinin URL'sine ulaşmayı bildiklerinden emin olun, görüntünün yer aldığı Web sayfasının URL'sine değil.

Sözleşmeler programcılara kod yazarken yardımcı olur; dolayısıyla gördüğünüz her fonksiyon için sözleşme yazmak her zaman için iyi bir fikirdir.

Sadece bazı örnek kodlara bakarak bir fonksiyonun sözleşmesini bilebilir misiniz? Burada kullanılan fonksiyona bir bakın ve o fonksiyon için İsim, Girdi ve Çıktı yazmaya çalışın.

Bir fonksiyonun Sözleşmesini kod ile karıştırmadığınızdan emin olun! Aşağıdakilerden bazıları sözleşmeler; fakat bazıları sadece o fonksiyonların kullanılış örnekleri. Hangisinin hangisi olduğunu ayırt edebilir misin?:

; triangle : Sayı Metin Metin -> Görüntü

(triangle 100 "outline" "blue")

(square (+ 200 5) "solid" "red")

; square : Sayı Metin Metin -> Görüntü

Bazen kod yazarken hata yaparız ve sözleşmeye uymayan bir değer kullanırız. Neyse ki, bilgisayar, bu gibi durumları tespit eder ve sorunu bulmamızda ve düzeltmemizde bize yardım etmek için hata mesajları verir. Hata mesajları, kodun hata içeren kısımlarını belirtir ve bilgisayarın sorunu bulduğu yeri açıklar.

Aşağıdaki doğru olmayan her bir ifade için koda bakın ve hatayı görmeye çalışın. Ondan sonra, kodu Etkileşim Penceresine yazın ve hangi hata mesajını alacağınızı görün. Hata, sizin tespit ettiğinizle aynı mı?:

(+ 4 "merhaba")

("merhaba" + "anne")

(* (+ 4 5) "pizza")

(star "solid" "red" 40)

(star "40" "solid" "red")

(star 40 "red" "solid")

(star 40 "solid" "yelow")

(star (* 4 10) "blue")

(cirle 25 "outline" "blue")

Controlled practice with error messages helps students gain confidence in dealing with them later on. It is fine if students don’t spot the errors for themselves at first, though having students explain the problems in their own words should reinforce correct use of these functions later in the course.

Girdi olarak Görüntü alan birkaç fonksiyon daha var. Örneğin, bir görüntüyü soldan sağa döndürmek istediğinizi varsayalım; ki böylece simetrisi görünüyor olacak. Hem Girdi hem de Çıktı olarak Görüntü kullanan flip-horizontal fonksiyonunu kullanabilirsiniz. Sözleşme (ve fonksiyonun bir örneği) için aşağıya bakınız:

; flip-horizontal : Görüntü -> Görüntü

(flip-horizontal (text "backwards" 50 "red"))

Girdi olarak Görüntü alan fonksiyonlar başlangıçta öğrenciler için genellikle çok zordur; çünkü öğrencilerin bu tür fonksiyonların birleşimini gerçekten çok iyi anlamaları gerekir. Eğer öğrenci bu kavram sorunuyla boğuşuyorsa, onlara, buradaki örneğin Değerlendirme Çemberi'ni çizdirin ve koda daha sonra çevirtin.

Çalışma kitabınıza aşağıdaki her fonksiyon için Sözleşme yazın ve örnek kod ile denemeler yapın. Fonksiyonların Görüntüye nasıl etki ettiğini hesaplayabilir misiniz? :

; flip-vertical : Görüntü -> Görüntü

(flip-vertical (text "upside-down" 50 "red"))



; scale : Sayı Görüntü -> Görüntü

(scale 2 (text "resize" 10 "purple"))



; rotate : Sayı Görüntü -> Görüntü

(rotate 45 (text "spin" 30 "green"))

Daha öncekiler gibi, zorlanan öğrencileri bunların her biri için Değerlendirme Çemberi çizmelerine teşvik edin.

Kapanış (Süre: 5 dakika)

Bu ders, Metinleri ve Görüntüleri (Sayılar ile birlikte) kapsayacak şekilde Değerlendirme Çemberleri, ifade ve kod kavramını genişletti. Sayılarda kullanılan fonksiyonlarla ilgili bildiğiniz her şeyin, Metinler ve Görüntülerde de çalıştığını öğrendiniz, ki bu programlarınızı daha ilginç kılar. Kendi görüntülerinizi oluşturmak için Görüntü fonksiyonlarının ve var olan Görüntülerin nasıl kullanıldığını öğrendiniz (bitmap/url aracılığıyla).

Bir sonraki ünitede, işten tasarruf etmek için kendi fonksiyonlarınızı nasıl oluşturacağınızı öğreneceksiniz (oyun yazmanın önemli bir bölümünü oluşturacak). Ayrıca, oyun tasarımınızdaki unsurlar için oyununuzu ihtiyaca uygun olarak düzenlemeye başlayacaksınız.