3 Mayıs 2016 Salı

Node.js 'de Oyun İşlemleri ve Prototipler -15

/**
 * Created by Eren on 29.4.2016.
 */

function fonksiyon(){
   
console.log("yazı.");
}

// module.exports.oyun = Oyuncu;
function Oyuncu() {
   
this.isim = "";
    this
.altın = 100;
    this
.altınGönder = function altınGönder (hedefOyuncu) {
// "this" şeklinde bahsedilien öğe: fonksiyonu çağıran öğedir. Bizim uygulamamızda bu öğe: Oyuncu'dur.

       
console.log("Oyun başında kullanıcılardaki altın durumu");
       
console.log(this.isim + ": " + this.altın);
       
console.log(hedefOyuncu.isim + ": " + hedefOyuncu.altın);
       
console.log("");

       
hedefOyuncu.altın += 1;
       
console.log(this.isim + " şu oyuncuya 1 altın gönderdi: " + hedefOyuncu.isim);
        this
.altın -= 1;
       
console.log("Bu alışveriş sonucunda " + this.isim + " adlı oyuncuda " + this.altın + " altın kaldı.");
       
console.log("");

       
console.log("Alışveriş sonucunda, kullanıcılardaki altın durumu:");
       
console.log(this.isim + ": " + this.altın);
       
console.log(hedefOyuncu.isim + ": " + hedefOyuncu.altın);
   
}};

var
Ali = new Oyuncu();
var
Murat = new Oyuncu();

Ali.isim = "Ali";
Murat.isim = "Murat";

Ali.altınGönder(Murat);

//prototype ile Method veya Property'ler oluşturabiliriz. Şimdi, mana adında bir Property oluşturalım.

Oyuncu.prototype.mana = 50;

//Oyuncu Class'ının mana property'si oluşturularak 50'ye eşitlendi.
// Artık Oyuncu class'ının tüm entity'lerinde mana değeri otomatik olarak 50 olacaktır.

console.log();
console.log("Oyunculardaki mana miktarları:")
console.log(Ali.isim + ": " + Ali.mana)
console.log(Murat.isim + ": "+ Murat.mana)

console.log("");
console.log("");
console.log("2. Bölüm Başlıyor")
console.log("");
console.log("");

//Şimdi de -prototype- ile yeni bir fonksiyon oluşturalım.

Oyuncu.prototype.canınıÇal = function canınıÇal(hedefKisi) {

   
Oyuncu.prototype.can = 200; // can isminde yeni bir property oluşturduk
   
this.can += 10; // Ali can kazandı.
   
hedefKisi.can -= 10; // Murat can kaybetti.

   
console.log(this.isim + " isimli oyuncu, şu oyuncudan" + " 10 can çaldı: " + hedefKisi.isim);
   
console.log("");
   
console.log(this.isim + "'isimli oyuncunun can durumu: " + this.can);
   
console.log(hedefKisi.isim + "'isimli oyuncunun can durumu: " + hedefKisi.can);
}

Ali.
canınıÇal(Murat);

//this = Ali
//hedefKisi = Murat

Sonuç:

"D:\WebStorm 2016.1.1\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" "Node.js 'de Oyun İşlemleri -15.js"

Oyun başında kullanıcılardaki altın durumu
Ali: 100
Murat: 100

Ali şu oyuncuya 1 altın gönderdi: Murat
Bu alışveriş sonucunda Ali adlı oyuncuda 99 altın kaldı.

Alışveriş sonucunda, kullanıcılardaki altın durumu:
Ali: 99
Murat: 101

Oyunculardaki mana miktarları:
Ali: 50
Murat: 50

2. Bölüm Başlıyor

Ali isimli oyuncu, şu oyuncudan 10 can çaldı: Murat

Ali'isimli oyuncunun can durumu: 210
Murat'isimli oyuncunun can durumu: 190

Node.js'de Modül Paylaşımı -14

(ModülPaylaşımıBilgiler' sayfası)

module.
exports = {
   
favoriFilm: "Herkesin sevdiği film",
   
favoriKitap: "Herkesin sevdiği kitap",
   
favoriOyun: "Herkesin sevdiği oyun",
}
(ModülPaylaşımıAyse' sayfası)

var degisken = require('./ModülPaylaşımıBilgiler')
console.log("Ayşe'nin bilgileri aşağıda belirtilmiştir")
console.log("");
console.log("Ayse'nin favori filmi şudur: " + degisken.favoriFilm)
console.log("Ayse'nin favori kitabı şudur:  " + degisken.favoriKitap)
console.log("Ayse'nin favori oyunu şudur:  " + degisken.favoriOyun)
console.log("");
console.log("");

//Burada hiçbir property'nin değerini belirtmedik.
//Tüm property'ler (favoriFilm, favoriKitap, FavoriOyun) şu sayfadan otomatik olarak referans alınıyor:
// ObjectFactoryBilgiler
//DİKKAT// Referans olarak alınıyor dedik; yani aynı veri kesinlikle ikinci bir kez oluşturulmuyor.
// Bu durum; uygulamamızın performansı açısından oldukça faydalıdır.
// Eğer veriyi referans olarak almayı istemiyor ve kopyalamak istiyorsak; bunu 'Object Factory'
// ile yapabiliriz.
(ModülPaylaşımıFatma' sayfası)

var degisken = require('./ModülPaylaşımıBilgiler')
degisken.favoriFilm = "Fatma'nın Yeni Kitabı";
degisken.favoriKitap = "Fatma'nın Yeni Kitabı";

// degisken.favoriOyun = "Fatma'nın Yeni Oyunu"; // burayı comment'ledik
//Bu yüzden favoriOyun propertisi otomatikman ObjectFactoryBilgiler'den referans alacak.

console.log("Fatma'nın bilgileri aşağıda belirtilmiştir")
console.log("");
console.log("Fatma'nın favori filmi şudur: " + degisken.favoriFilm)
console.log("Fatma'nın favori kitabı şudur:  " + degisken.favoriKitap)
console.log("Fatma'nın favori oyunu şudur:  " + degisken.favoriOyun)
console.log("");
console.log("");
//bu sayfada favoriKitabımız ayrıca belirtilmediği için, favorikitap'ın bilgisi
// ObjectFactoryBilgiler sayfasından referans olarak alınmaktadır.
(ModülPaylaşımıÇalıştır' sayfası)
require('./ModülPaylaşımıAyşe');
require('./ModülPaylaşımıFatma');
Uygulmayı bu sayfada çalıştırıyoruz.

Node.js'de Modüller -13

(ModüllerBirinciTipA Sayfası)
var degisken = require('./ModüllerBirinciTipB') console.log(degisken.isim); console.log(degisken.soyisim); console.log(degisken.numara); degisken.textYazdir();degisken.baskaTextYazdir();
(ModüllerBirinciTipB Sayfası)
module.exports = {

    isim: "ali",
    soyisim: "veli",
    numara: 23,

    textYazdir: function () {
        console.log("Bu bir text");
    },

    baskaTextYazdir: function () {
        console.log("Başka bir text");
    }
}
Modüller sayesinde, kodların karmakarışık bir hale gelmesini önleyebiliriz. Benzer tipteki kodları aynı modüller içerisinde toplayarak uygulamamızı daha düzenli bir hale getirebiliriz.
Bu işlemi yaparken module.exports  komutunu kullanıyoruz. Şimdiki işlemimizde, ‘isim, soyisim, numara’ gibi verilerimizi ve
textYazdir, baskaTextYazdir‘ gibi fonksiyonlarımızı export ediyoruz.
ModüllerBirinciTipB sayfasındaki verilerimizi exports ettikten sonra; bu verilerimizi
ModüllerBirinciTipA sayfasında kullanıyoruz. Bunu başarmamız için tabi ki önce export ettiğimiz dosyayı sayfamızda tanıtmamız gerek. Bunun için de require komutunu kullandık. require ile sayfamızı belirttik ve bu sayfadaki verileri degisken ‘e atadık.
İşlemimiz tamam. Şimdi, ModüllerBirinciTipB
sayfamızdaki fonksiyonlari ve diğer verileri kullanabiliriz. Bu fonksiyon ve verilere artık degisken ismi adı altında ulaşacağız. Şöyle ki:
degisken.textYazdir();degisken.baskaTextYazdir(); console.log(degisken.isim); console.log(degisken.soyisim); console.log(degisken.numara);

Node.js 'de == ve === Arasındaki Farklar -12

console.log(19 == "19") //true
console.log(19 === "19")//false

// == olduğunda: değerler aynı olduğu için (string veya integer olup olmadığına bakmaksızın) true verir.
// === olduğunda: type'lar farklı olduğu için (birisi integer iken diğeri string) false verecektir.

// Yani == , Value'lerin eşitliğine bakar iken,
// === , hem Value hem de Type eşitliğine bakar.

Node.js 'de Referans Verme -11

var person = {
   
favFood: "Lobster Thermidor",
   
favMovie:"The Creed"
};
var
Michael = person;
Michael.favFood = "Bacon";
console.log(Michael.favFood)

//Yukarıda, referans verme işlemi gerçekleşmiştir. Bu işlem;
// kopyalama yöntemiyle yeni veriler oluşturma işlemi ile karıştırılmamalıdır.
//Referans verme işleminde; kopyalamada olduğu gibi yeni veriler oluşturulmaz.
// Bu da bize uygulamamızın daha performanslı çalışmasını sağlar.


29 Nisan 2016 Cuma

Node.js 'de Sipariş Oluştur ve Gönder -10


function siparisOlustur(siparisNo) {
   
console.log("Müşterinin Sipariş Numarası: ", siparisNo)
   
siparisiHazirlaVeGönder(function () {
       
console.log("Gönderilen Sipariş: ", siparisNo);
   
});
}

function siparisiHazirlaVeGönder(fonksiyonuÇağır) {
   
setTimeout(fonksiyonuÇağır, 5000);
   
//SetTimeOut'un anlamı: Hey program; debug'a başladıktan 5 saniye sonra beni aktif et.
    // Beni aktif edene kadarki süreçte kendi işlerine devam et.
}
siparisOlustur(1);
siparisOlustur(2);
siparisOlustur(3);
siparisOlustur(4);
siparisOlustur(5);

Sonuç:
Müşterinin Sipariş Numarası:  1

Müşterinin Sipariş Numarası:  2

Müşterinin Sipariş Numarası:  3

Müşterinin Sipariş Numarası:  4

Müşterinin Sipariş Numarası:  5

Gönderilen Sipariş:  1

Gönderilen Sipariş:  2

Gönderilen Sipariş:  3

Gönderilen Sipariş:  4

Gönderilen Sipariş:  5

Program ilk başladığında, Müşterinin Sipariş Numarası (5 adet sipariş numarası) yazdırıldı.
SettimeOut komutundan dolayı; Gönderilen Siparişler (5 adet sipariş) program çalıştıktan 5 saniye sonra yazdırıldı.


Node.js 'de Veri Yazdırma -9

var kisi = {
    isim:"Ahmet",
    soyisim: "Öz",
    numara: 66
}
console.log(kisi);
console.log(kisi.isim);
console.log(kisi.soyisim);

function toplama(a,b) {
    return a + b
}

console.log(toplama(3,7));
console.log(toplama(5,(kisi.numara)));
console.log("Sayıların toplamı = " + toplama(5,(kisi.numara)) + "'dir " +
 "(" + 5 + " + " + kisi.numara + " = " + (5 + kisi.numara) + ")");

function boşFonksiyon() {};
console.log(boşFonksiyon());
console.log(toplama(kisi.isim, kisi.soyisim));
Sonuç:

27 Nisan 2016 Çarşamba

Csharp'ta Varsayılan Değer Atama -8

Csharp’ta; oluşturulan bir class’ın property’lerine nasıl varsayılan değerler (default values) atanılacağı gösteriliyor:

using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Text;

namespace asd
{
    class Program
    {
        public class Kisi
        {
            public int Id;
            public string Name;
            public string Gender;
            public string City;
            public Kisi()
            {
                Name = "Ahmet"; //2
                Gender = "Erkek"; //2
            }
            //Kisi _kisi = new Kisi();
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Welcome");
            var kisi1 = new Kisi();
            kisi1.City = "ankara"; //1
            Console.WriteLine("Mainstream'desin");
            Console.WriteLine(" ");
            Console.WriteLine(kisi1.Name); //varsayılan olarak 2 nolu kısımda yazıldı
            Console.WriteLine(kisi1.Gender); //varsayılan olarak 2 nolu kısımda yazıldı
            Console.WriteLine(kisi1.City); //1 nolu kısımda elle yazıldı
            Console.WriteLine();

            var kisi2 = new Kisi(); //
            Console.WriteLine(kisi2.Name); ////varsayılan olarak 2 nolu kısımda yazıldı
            Console.WriteLine(kisi2.City); ////varsayılan olarak City property'sinde veri yok. O yüzden Null olacaktır.
            Console.ReadKey();
        }
    }
}


Indexer in C#

 İndexer, bir class'ın array gibi davranmasını sağlar.


using System; namespace CodeInConsole { class IndexerCreationClass { private string[] val = new string[3]; public string this[int index] { get { return val[index]; } set { val[index] = value; } } } class main { public static void Main() { IndexerCreationClass indexerCreationClass = new IndexerCreationClass(); // Yukarıya dikkat edelim. IndexerCreation, aslında bildiğimiz klasik bir class. // Ama aşağıda bu class'ı string array'ı gibi kullanıyoruz. // Aşağıda klasik bir class olan IndexerCreation'un bir objesinin // nasıl bir array gibi davrandığını görüyoruz. indexerCreationClass[0] = "Text 1"; indexerCreationClass[1] = "Text 2"; indexerCreationClass[2] = "Text 3"; Console.Write("Printing values stored in objects used as arrays\n\n"); Console.WriteLine("First value = {0}", indexerCreationClass[0]); Console.WriteLine("Second value = {0}", indexerCreationClass[1]); Console.WriteLine("Third value = {0}", indexerCreationClass[2]); } } }

26 Nisan 2016 Salı

Unable to update database to match... -5

Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.

Database’de değişiklik yapıldığı halde, database’i update etmezsek bu hatayla karşılaşabiliriz.
Automatic Migration disabled olduğunda da bu hatayla karşılaşırız. Automatic Migration’u Enable yaptığımızda, güncellemeler otomatik olarak yapılır ve bu hatayla karşılaşmayız.

Ayrıca Package Manager Console’a update-database yazarak, db’yi güncelleyebilir ve bu hatayı giderebiliriz.

Database’i update etmek, database’deki bazı verilerin kaybolmasına yol açabilir. Bu durum, update-database komutunun çalışması konusunda kullanıcıyı uyaracaktır ve komut çalışmayacaktır. Eğer, verilerin kaybolmasını göze alıyorsak:
update-database -Force komutunu kullanarak database’i “kaba kuvvet uygulayarak” güncelleyebiliriz.

Bu gibi hataları aşmak için, elle yeni bir migration eklememiz de gerekebilir. Yeni migration eklemek için, Ayrıca Package Manager Console’a  add-migration ÖrnekMigration yazmamız gerekir. ÖrnekMigration yerine, tabi ki istediğimiz herhangi bir text’i girebiliriz.
Kodu çalıştırdığımızda, migration’umuz oluşturulacaktır.

String or binary data would -3

Hatamız: String or binary data would be truncated. The statement has been terminated.

Database'de oluşturduğumuz bir field'ın karakter uzunluğu ile kod tarafında düzenlenmiş olan bu field'ın karakter uzunluğu çakışıyorsa bu hatayı alabiliriz.

Örneğin DB tarafındaki Name field'ı nvarchar(20) ise ve kod tarafındaki Name field'ı 20 değil de örneğin 30 olarak girilmişse bu hata alınacaktır. Bu iki veriyi birbirine eşitlediğimizde sorun çözülecektir.

25 Nisan 2016 Pazartesi

Input string was not in a correct format -2

hata: Input string was not in a correct format.Input string was not in a correct format.

Bu hata birçok şekilde oluşabilir. Bizim projemizde şu durumda karşımıza çıktı;

[DisplayFormat(DataFormatString = "{dd-mm-yyyy}", ApplyFormatInEditMode = true)]
        [Display(Name = "Alış Tarihi")]
        public DateTime SatisTarih { get; set; }

Düzenleme şu şekilde yapıldığında hata ortadan kalktı.

[DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        [Display(Name = "Alış Tarihi")]
        public DateTime SatisTarih { get; set; }