Callback (програмування)

Колбек часто повертається на рівень того, хто його викликав.

У програмуванні, функція зворотного виклику, або колбек (від англ. callback) є частиною виконуваного коду, що передається як аргумент до іншого коду, який має викликати цей код у відповідь (call back), тобто виконати аргумент у певний момент часу. Виклик функції відбувається для організації дії у відповідь — негайної у випадку синхронної функції зворотного виклику (наприклад, ітерування колекції) або затриманої у випадку асинхронної (наприклад, виклик обробника подій після приходу даних з клавіатури). В усіх випадках намір полягає у тому, щоб вказати функцію або підпрограму як сутність, що, в залежності від мови, може бути більш чи менш схожою на змінну.

Мови програмування підтримують колбеки по-різному, часто реалізуючи їх як підпрограми, анонімні функції, блоки, або вказівники на функції. Часто колбеки використовують, щоб передавати замикання.

Проєктування

Є два типи колбеків, вони відрізняються способом контролю потоку даних під час виконання: блокуючі колбеки (відомі як синхронні колбеки) і відкладені колбеки (також відомі як асинхронні колбеки). У той час, як блокуючі колбеки викликаються перед тим, як функція поверне результат, відкладені колбеки можуть виконуватися вже опісля того, як функція повернула результат. Відкладені колбеки часто використовуються в контексті операцій вводу-виводу або обробки подій і викликаються шляхом переривання одного та більшої кількості потоків чи іншим потоком у випадку багатопотоковості. Відповідно до своєї природи, блокуючі колбеки можуть працювати без переривань чи багатопотоковості, вони рідко використовуються для синхронізації або делегації роботи іншому потокові.

Колбеки використовуються, щоб програмувати у віконних системах. У цьому випадку застосунок надає посилання на певну функцію колбеку, яку має викликати операційна система, яка потім викликає властиві даному застосункові функції у відповідь на події на зразок кліків мишкою чи натискання на клавіші. Тут основною проблемою є керування привілеями та безпекою: у той час, як функція викликається операційною системою, вона не має виконуватися з тими ж привілеями, що й система. Для вирішення цієї проблеми використовуються кільця захисту.

Наочні приклади

Уяви ситуацію: увечері ти маєш зустрітися з друзями у кав'ярні. Оскільки для тебе дуже важливо правильно вибрати столик, то ти кажеш чоловікові (або дружині): по дорозі на роботу зайди до кав'ярні і зателефонуй мені — порадимося щодо столика, коли будеш на місці і по телефону опишеш мені, які столики там є.

Це — приклад колбеку. До функції «вибериСтолик()» ти додаєш колбек-функцію «порадьсяЗіМноюПоТелефону()» і ось можливий псевдо-код для цього:

function chooseBestTable( callBack ) { 
    var freeTables = [tableOne, tableTwo, tableThree];
    callBack( freeTables );
}

Або: Уяви, що ти печеш паску. Поставила пектися і пішла читати про колбеки, а щоб не проґавити її, ставиш на телефоні нагадування на 30 хвилин: «перевірити духовку». Тут вже маємо приклад колбеку: є процес випікання (немиттєвий), початок цього процесу (функція «початиВипікання()») і його колбек — твоє нагадування (функція «перевіритиВипікання()»). Колбек спрацює — і ти перевіриш духовку, можливо, паска вже готова. Без колбеку тобі прийшлося б сидіти усі 30 хвилин над духовкою. З колбеком можна дозволити собі трохи відволіктися і робити інші справи, бо колбек спрацює і нагадає.

Втілення

Форма колбеків може бути різною у різних мовах програмування:

  • В assembly, C, C++, Pascal, Modula2 і подібних до них мовах на машинному рівні передається вказівник на функцію як аргумент іншої (зовнішньої чи внутрішньої) функції. Це підтримується більшістю компіляторів та дає перевагу використання разом різних мов без спеціальних бібліотек чи класів-обгорток. Прикладом може бути Windows API, що більш чи менш напряму доступний з багатьох мов, компіляторів та асемблерів. Зворотньою стороною є те, що програміст має розуміти машинний рівень, також не працює контроль багатьох типів.
  • C++ дозволяє об'єктам надавати їх власні реалізації операції виклику функцій. Стандартна бібліотека шаблонів приймає ці об'єкти (що звуться функторами), так само, як і вказівники функцій, як параметри для багатьох поліморфних алгоритмів.
  • Багато інтерпретованих мов, на кшталт JavaScript, Lua, Python, Perl[1][2] та PHP, просто дозволяють передавати об'єкт функції.
  • CLI-мови типу C# і VB.NET надають безпечне щодо типів включаюче посилання, «делегата», щоб визначити жорстко-типізований вказівник на функцію. Вони можуть використовуватися як колбеки.
  • Події і обробники подій у мовах .NET надають загальний синтаксис колбеків.
  • Функціональні мови в цілому підтримують функції першого класу, які можуть передаватися як колбеки до інших функцій, зберігатися як дані або повертатися з функцій.
  • Деякі мови, такі як Algol 68, Perl, Python, Ruby, Smalltalk, C++11 та пізніші, новіші версії C# та VB.NET, а також більшість функціональних мов, дозволяють неіменованим блокам коду (анонімним функціям) передаватися замість посилань на функції, визначені деінде.
  • В деяких мовах, типу Scheme, ML, JavaScript, Perl, Smalltalk, PHP (з версії 5.3.0),[3] C++11 та пізніших, та в багатьох інших, такі функції можуть бути замиканнями, тобто вони можуть використовувати та змінювати ті змінні, що були локально визначені у тому ж контексті, в якому була визначена функція.
  • В об'єктно-орієнтованих мовах програмування без функції багатозначних аргументів, як Java до версії 1.7,[citation needed] колбеки можна симулювати, передаючи екземпляр абстрактного класу або інтерфейсу, у якому отримувач викличе один чи більше методів, у той час як той, хто викликає, надає конкретну реалізацію. Такі об'єкти є насправді пачкою колбеків, плюс дані, які вони мають обробити [прояснити]. Вони корисні у реалізації різних шаблонів дизайну типу Відвідувач, Оглядач, та Стратегія.


Java

public interface CalcCallback {
    int plus(int x, int y);
}

public class Test2 {

    private Test test;

    public Test2(Test test) {
        this.test = test;
    }

    public void calc() {
        CalcCallback callback = new CalcCallback() {

            @Override
            public int plus(int x, int y) {
                return x + y;
            }
        };

        test.calcViaCallback(callback);
    }
}

public class Test {

    int x = 5;
    int y = 12;

    public void calcViaCallback(CalcCallback callback) {
        int sum = callback.plus(x, y);

        System.out.println(sum);
    }
}

public class Main {

    public static void main(String[] args) {
        Test test = new Test();

        Test2 test2 = new Test2(test);

        test2.calc();
    }
}

JavaScript

Колбеки використовуються в мовах подібних до JavaScript, включаючи підтримку функцій як колбеків через js-ctypes[4] і в компонентах типу addEventListener.[5] Ось простий приклад колбеку:

function someAction(x, y, someCallback) {
    return someCallback(x, y);
}

function calcProduct(x, y) {
    return x * y;
}

function calcSum(x, y) {
    return x + y;
}
// alerts 75, the product of 5 and 15
alert(someAction(5, 15, calcProduct));
// alerts 20, the sum of 5 and 15
alert(someAction(5, 15, calcSum));

Спочатку функція someAction визначається з аргументом-колбеком someCallback. Потім, як можливий колбек для someAction, визначається функція calcProduct. Інші функції також можуть використовуватися для  someCallback, наприклад calcSum. У цьому прикладі someAction() викликається двічі: спочатку використовуючи як колбеку calcProduct, і ще раз — як колбек маючи calcSum. Функції повертають відповідно добуток та суму, що потім відображаються на екрані за допомогою alert.

У цьому простому прикладі колбеки використовуються переважно для демонстрації принципу. Можна викликати колбеки як звичайні функції: calcProduct(x, y). Колбеки корисні тоді, коли функція має виконати дії перед викликом колбека, або коли функція не має (або не може мати) результату для повернення через return, як у випадках асинхронного JavaScript (побудованого на таймерах) або запитів XMLHttpRequest. Корисні приклади можна знайти в бібліотеках JavaScript типу jQuery, де метод each() проходить по об'єкту типу масива, а перший аргумент є колбеком, що виконується на кожній ітерації.

Swift

func relatedValue(value: Bool, callback: Int -> ()) {
    callback(value ? 150 : 25)
}

// скорочений вигляд замикання, без захоплення посилання на змінні 
relatedValue(true) { value in
    println("result value is: \(value)")
}

// або
relatedValue(true, callback: { value in
    println("result value is: \(value)")
})

// також приклад застосування при ініціалізації об'єкта
class A {
    var someValue: String?

    init(completion: A -> Void) {
        completion(self)
    }
}

let a = A {
    $0.someValue = "This is initial value!"
}

Scala

def callbackMethod(a: Int, b: Int, c: Int => Unit) = {
   c(a + b)
}

callbackMethod(2, 2, { result => println(result) })

C

#include <stdio.h>
 
// В мові С колбеки реалізуються шляхом передачі вказівника на функцію
// Визначимо тип callback_t, що являтиме собою вказівник на функцію, що
// повертає int і приймає як аргументи два числа типу int
typedef int (* callback_t)(int, int);
 
int apply_callback(int x, int y, callback_t some_callback)
{
   return (*some_callback)(x, y);
}
 
int add_callback(int x, int y)
{
    return x + y;
}
 
int mul_callback(int x, int y)
{
    return x * y;
}
 
int main() 
{
    printf("10 + 35 = %d\n", apply_callback(10, 35, add_callback));
    printf("10 * 35 = %d\n", apply_callback(10, 35, mul_callback));
    return 0;
}

C#

class CallbackExample
{
        // Ключове слово "delegate" у C# означає, що ви задаєте визначення нового типу. Цей тип наслідується від System.Delegate, котрий надає механізм виклику методів за їх посиланням
        // Коли ви вказуєте метод, що узгоджується з сигнатурою, визначеною делегатом, як аргумент відповідного типу, буде створено новий екземпляр делегованого типу, всередині якого буде збережено вказівник на переданий метод
        // Надалі ви можете використовувати цей екземпляр як звичайний метод (метод Calculate добре демонструє це)
	public delegate int BinaryOperationCallbackDelegate(int operand1, int operand2);

        // Узгоджується з сигнатурою BinaryOperationCallbackDelegate, тому може використовуватись як аргумент типу BinaryOperationCallbackDelegate
	public int AddCallback(int operand1, int operand2)
	{
		return operand1 + operand2;
	}

        // Узгоджується з сигнатурою BinaryOperationCallbackDelegate, тому може використовуватись як аргумент типу BinaryOperationCallbackDelegate
	public int SubstractCallback(int operand1, int operand2)
	{
		return operand1 - operand2;
	}

        // Вимагає операнди, потрібні для методів типу BinaryOperationCallbackDelegate і сам метод цього типу для його зворотного виклику
	public int Calculate(int operand1, int operand2, BinaryOperationCallbackDelegate callback)
	{
		int result = callback(operand1, operand2);
		return result;
	}
}

class Program
{
	static void Main(string[] args)
	{
		const int operand1 = 10;
		const int operand2 = 20;

		CallbackExample callbackExample = new CallbackExample();

		Console.WriteLine(callbackExample.Calculate(operand1, operand2, callbackExample.AddCallback));
		Console.WriteLine(callbackExample.Calculate(operand1, operand2, callbackExample.SubstractCallback));

		Console.ReadLine();
	}
}

У більшості випадків вам цілком вистачить вбудованих делегатів типу: Action [Архівовано 7 липня 2015 у Wayback Machine.], Function [Архівовано 7 липня 2015 у Wayback Machine.], Predicate [Архівовано 6 липня 2015 у Wayback Machine.]

Python

TODO: Колбеки у Python

def someAction(x, y, someCallback):
    return someCallback(x, y)


def calcProduct(x, y):
    return x * y


def calcSum(x, y):
    return x + y

# виводить 75, добуток 5 та 15
print someAction(5, 15, calcProduct)
# виводить 20, суму 5 та 15
print someAction(5, 15, calcSum)

# приклад використання лямбда-функцій
numbers = [ num for num in range(20) ]

# ітерація по списку, і відсіювання елементів відповідно до значення, яке поверне лямбда-функція (предикат)
# непарні числа
odd_numbers = list(filter(lambda n: n % 2 == 1, numbers))

# парні числа
even_numbers = list(filter(lambda n: n % 2 == 0, numbers))

# вивід двох нових списків із відсіяними значеннями
print('odd numbers', odd_numbers)
print('even numbers', even_numbers)

Ruby

# Викликає переданий блок коду, передаючи вхідний параметр у блок, як вхідний аргумент
# Params:
# +param+:: параметр, який буде переданий блоку коду
def call_block_with_param(param)
	yield param
end

# Викликає передану процедуру, передаючи вхідний параметр у неї, як вхідний аргумент
# Params:
# +param+:: параметр, який буде переданий у процедуру
# +procedure+:: +Proc+ процедура, яку потрібно викликати із переданим аргументом
def call_proc_with_param(param, procedure)
	procedure.call param
end

# Викликає переданий лямбда вираз, передаючи вхідний параметр у неї, як вхідний аргумент
# Params:
# +param+:: параметр, який буде переданий у лямбду
# +lamda+:: лямбда вираз, який потрібно викликати із переданим аргументом
def call_lambda_with_param(param, lamda)
	lamda.call param
end

call_block_with_param ("Hello") { |param| puts "#{param}" }

procedure = Proc.new do |param|
	puts "#{param}"
end
call_proc_with_param("Hello", procedure)

call_lambda_with_param("Hello", lambda { |param| puts "#{param}" } )

Lua

-- функція, яка опрацьовує елементи переданого їй масиву по черзі, і формує новий масив перетворених функцією callback елементів
function processArray(array, callback)
  local outputTable = {}
  for i, elem in ipairs(array) do
    local tmp = callback(elem)
    table.insert(outputTable, tmp)
  return outputTable
end

function square(x)
  return x * x
end

local numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
local squares = processArray(numbers, square)

for i, number in squares do
  print(number, ", ")
end

Див. також

Зноски

  1. Perl Cookbook - 11.4. Taking References to Functions. Архів оригіналу за 10 квітня 2008. Процитовано 3 березня 2008.
  2. Advanced Perl Programming - 4.2 Using Subroutine References. Архів оригіналу за 5 липня 2008. Процитовано 3 березня 2008.
  3. PHP Language Reference - Anonymous functions. Архів оригіналу за 4 липня 2015. Процитовано 8 червня 2011.
  4. Callbacks. Mozilla Developer Network. Архів оригіналу за 5 листопада 2012. Процитовано 13 грудня 2012. [Архівовано 5 листопада 2012 у Wayback Machine.]
  5. Creating Javascript Callbacks in Components. Mozilla Developer Network. Архів оригіналу за 3 листопада 2013. Процитовано 13 грудня 2012. [Архівовано 3 листопада 2013 у Wayback Machine.]

Посилання

Read other articles:

Bandiera della Marina mercantile italiana. La marina mercantile italiana rappresenta la flotta civile composta di navi mercantili italiane che siano gestite dal governo italiano oppure dal settore privato, impegnata nel commercio e nel trasporto marittimo di passeggeri e di merci. Ad essa compete il trasporto di passeggeri e di merci in tempo di pace. In tempo di guerra, la marina mercantile presta ausilio alla Marina Militare e può essere chiamata ad effettuare il trasporto truppe e dare ri...

 

A plant in the daisy family from southern Africa Felicia mossamedensis Scientific classification Kingdom: Plantae Clade: Tracheophytes Clade: Angiosperms Clade: Eudicots Clade: Asterids Order: Asterales Family: Asteraceae Genus: Felicia Section: Felicia sect. Felicia Species: F. mossamedensis Binomial name Felicia mossamedensis(Hiern) Mendonça[1] Synonyms Detris mossamedensis D. hyssopifolia var. straminea, F. hyssopifolia var. straminea F. lutea, Aster luteus Felicia mossameden...

 

Lost in the EchoSingel oleh Linkin Parkdari album Living ThingsSisi-BLost in the Echo (KillSonik Remix)Dirilis5 Oktober 2012DirekamMaret 2012Genre Alternative rock[1] rap rock[2] electronic rock[3] Durasi3:25LabelWarner Bros.PenciptaLinkin ParkProduser Mike Shinoda Rick Rubin Kronologi singel Linkin Park Burn It Down (2012) Lost in the Echo (2012) Powerless (2012) Video musikLost in the Echo di YouTubeLost in the Echo (Lyric Video) di YouTubeLost in the Echo (Interacti...

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Desember 2022. Surabaya PengarangIdrusNegaraIndonesiaBahasaIndonesianPenerbitMerdeka PressTanggal terbit1946 atau 1947Halaman64OCLC64030690 Soerabaja (EYD Surabaya, atau Surabaja) adalah salah satu novel yang ditulis oleh Idrus dan dipublikasikan tahun 1946 ata...

 

Not to be confused with Bauline East, Newfoundland and Labrador. Town in Newfoundland and Labrador, CanadaBaulineTownBaulineLocation of Bauline in NewfoundlandCoordinates: 47°42′N 52°49′W / 47.7°N 52.82°W / 47.7; -52.82CountryCanadaProvinceNewfoundland and LabradorGovernment • MayorCraig LeGrowArea[1] • Land15.94 km2 (6.15 sq mi)Population (2021)[2] • Total412 • Density28.3/km2 ...

 

ABCCalcio O Mais Querido, Alvinegro Potiguar, Clube do Povo, Campeão das Multidões, Decacampeão, Elefante da Frasqueira Segni distintivi Uniformi di gara Casa Trasferta Colori sociali Nero, bianco Simboli Elefante Inno Hino do ABC FCClaudomiro Batista de Oliveira Dati societari Città Natal Nazione  Brasile Confederazione CONMEBOL Federazione CBF Campionato Série C Fondazione 1915 Presidente Paulo Tarcísio Allenatore Marcelo Cabo Stadio Frasqueirão(18 017 posti) Sito web www....

This article is about the annual survey published by the Fraser Institute. For other indices, see Indices of economic freedom. Economic Freedom of the World 2021 Economic Freedom of the World report from the Fraser InstituteAuthorsJames Gwartney, Robert A. Lawson, Joshua C. Hall, Ryan Murphy, Robbie Butler, John Considine, Hugo J. Faria, Rosemarie Fike, Fred McMahon, Hugo M. Montesinos-Yufa, Dean Stansel, Meg Tuszynski[1]Cover artistHeather Jalbout[1]CountryCanada[1&#...

 

Painting by Paolo Veronese Supper at EmmausItalian: Cena in Emmaus, French: Les Pèlerins d'EmmaüsArtistPaolo VeroneseYearcirca 1559–1560[1]Mediumoil on canvasSubjectRoad to Emmaus appearanceDimensions241 cm × 415 cm (7.91 ft × 13.62 ft)LocationLouvre, ParisOwnerGovernment of France Supper at Emmaus (Cena in Emmaus) is a painting by Italian Renaissance artist Paolo Veronese. At the Louvre, where it is housed, it is known as Les Pèlerins ...

 

Noodle soup containing beef Beef noodle soupLanzhou beef noodle soupTypeNoodle soupRegion or stateEast Asia and Southeast AsiaMain ingredientsBeef, beef broth, vegetables, Chinese noodles  Media: Beef noodle soup Beef noodle soupTraditional Chinese牛肉麵Simplified Chinese牛肉面Literal meaningBeef noodlesTranscriptionsStandard MandarinHanyu Pinyinniúròu miànother MandarinXiao'erjingﻧِﯿَﻮْ ژِﻮْ ﻣِﯿًﺎDunganНюроў мянHakkaRomanizationngiu nguk m...

Hasil pertandingan tim nasional sepak bola Indonesia tahun 2021Musim 2021Manajer Shin Tae-yong(sejak 28 Desember 2019[1][2] - saat ini)← 2020 2022 → Halaman ini memuat hasil pertandingan tim nasional sepak bola Indonesia sepanjang tahun 2021.[3][4][5] Timnas Senior Pria Kepelatihan 2021 Yang dihitung hanya saat berhadapan dengan negara lain. Nama Kebangsaan Musim Pertandingan Menang Seri Kalah Penghargaan Shin Tae-yong Korea Selatan 2021 16 7 3 6 - ...

 

Drug that inhibits activity of immune system This article needs more reliable medical references for verification or relies too heavily on primary sources. Please review the contents of the article and add the appropriate references if you can. Unsourced or poorly sourced material may be challenged and removed. Find sources: Immunosuppressive drug – news · newspapers · books · scholar · JSTOR (February 2022) Prednisone Dexamethasone Immunosuppressive d...

 

Italian immigrant striker killed during the Lawrence Textile Strike Photo, Memorial Day 1912, Lawrence, Massachusetts, at the grave of Anna LoPizzoAnna LoPizzo was an Italian immigrant striker killed during the Lawrence Textile Strike (also known as the Bread and Roses Strike), considered one of the most significant struggles in U.S. labor history. Anna LoPizzo's death was significant to both sides in the struggle. Wrote Bruce Watson in his epic Bread and Roses: Mills, Migrants, and the Strug...

River in north-central California South Fork Eel RiverMeander in the South Fork Eel RiverMap of the Eel River drainage basin showing the South ForkLocationCountryUnited StatesStateCaliforniaPhysical characteristicsSource  • locationBranscomb, California • coordinates39°36′46″N 123°29′34″W / 39.61278°N 123.49278°W / 39.61278; -123.49278[1] • elevation2,500 ft (760 m) MouthEel River&#...

 

Mamadou FofanaNazionalità Mali Altezza187 cm Calcio RuoloDifensore, Centrocampista Squadra Amiens CarrieraGiovanili 2013-2015 Stade Malien2016-2017 Alanyaspor Squadre di club1 2016-2017 Alanyaspor1 (0)2017→  Bandırmaspor10 (0)2017-2018 Alanyaspor24 (0)2018-2021 Metz69 (0)2021- Amiens32 (0) Nazionale 2015 Mali U-177 (0)2017 Mali U-203 (0)2017- Mali39 (1) 1 I due numeri indicano le presenze e le reti segnate, per le sole partite di campionato.Il ...

 

The Disaster Area The Disaster Area en 2022.Informations générales Pays d'origine Allemagne Genre musical Post-hardcore[1], metalcore[1], rock alternatif Années actives Depuis 2012 Labels Redfield Records, Deafground Records, Noizgate Records Composition du groupe Membres Alexander MaidlFranz ApfelbeckAlexander KisslingerMarkus SchmidtChristopher Zillinger Logo de The Disaster Area.modifier The Disaster Area est un groupe allemand de post-hardcore, originaire de Osterhofen, en Bavière. H...

Dutch painter Joseph Paelinck Joseph Paelinck, (20 March 1781 – 19 June 1839) was a painter from the Southern Netherlands. Biography Paelinck attended the Royal Academy of Fine Arts (Ghent) and then with Jacques-Louis David in Paris, where he painted in 1804 A Judgment of Paris, which earned him his first Academy Art Award for Ghent. After he had worked there a short time as a teacher, he went to Rome and stayed there for five years. He painted, among other things: Rome under Augustus for t...

 

Combination of words that has a figurative meaning For the realized structure particular to a language, see Idiom (language structure). For other uses, see Idiom (disambiguation). An idiom is a phrase or expression that largely or exclusively carries a figurative or non-literal meaning, rather than making any literal sense. Categorized as formulaic language, an idiomatic expression's meaning is different from the literal meanings of each word inside it.[1] Idioms occur frequently in a...

 

この項目では、次期継承者を指定する概念について説明しています。日本の皇室の儀式については「立太子の礼」を、皇位や帝位の継承者については「皇太子」をご覧ください。 立太子宣明の儀に臨む徳仁親王1991年(平成3年)2月23日 立太子(りったいし)は、広く東アジアにおいて広まった儀礼で、日本の天皇・中国の皇帝の皇子等を跡継ぎとして太子に立てること...

1963 song by Andy Williams Can't Get Used to Losing YouOne of US single picture sleevesSingle by Andy Williams with Robert Mersey and his Orchestrafrom the album Days of Wine and Roses and Other TV Requests B-sideDays of Wine and RosesReleasedMarch 1963RecordedDecember 1962GenreEasy listeningLength2:20LabelColumbia 42674Songwriter(s)Jerome Doc Pomus, Mort ShumanProducer(s)Robert MerseyAndy Williams with Robert Mersey and his Orchestra singles chronology Don't You Believe It (1962) Can't Get U...

 

池永 陽誕生 1950年 愛知県職業 小説家言語 日本語国籍 日本ジャンル 歴史小説主な受賞歴 小説すばる新人賞(1998年)中山義秀文学賞(2006年) ウィキポータル 文学テンプレートを表示 池永 陽(いけなが よう、1950年[1] - )は、日本の小説家。岐阜県山県市在住[2]。 経歴 愛知県豊橋市生まれ[1]。岐阜県立岐南工業高等学校卒業[1]。グラフィック�...